求可用高效的加密算法,最好原创。

解决方案 »

  1.   

    给你个RSA的Java版本,不知道漫步满足你的需求。package com.google.algorithm;import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.OutputStreamWriter;
    import java.math.BigInteger;
    import java.security.KeyPair;
    import java.security.KeyPairGenerator;
    import java.security.NoSuchAlgorithmException;
    import java.security.PrivateKey;
    import java.security.PublicKey;
    import java.security.SecureRandom;
    import java.security.interfaces.RSAPrivateKey;
    import java.security.interfaces.RSAPublicKey;public class RSA
    {
        public static void main(String[] args) throws NoSuchAlgorithmException, IOException, ClassNotFoundException
        {
            KeyPair pair = generateKeyPair();
            PrivateKey privateKey = pair.getPrivate();
            PublicKey publicKey = pair.getPublic();        // Save Pirvate Key
            FileOutputStream f1 = new FileOutputStream("private.ppk");
            ObjectOutputStream b1 = new ObjectOutputStream(f1);
            b1.writeObject(privateKey);        // Save Public Key
            FileOutputStream f2 = new FileOutputStream("public.ppk");
            ObjectOutputStream b2 = new ObjectOutputStream(f2);
            b2.writeObject(publicKey);        encrypt();
            
            decrypt();    }    public static void encrypt() throws IOException, ClassNotFoundException
        {
            String msg = "Hello World!";        FileInputStream f = new FileInputStream("public.ppk");
            ObjectInputStream b = new ObjectInputStream(f);
            RSAPublicKey pbk = (RSAPublicKey) b.readObject();        // RSA算法是使用整数进行加密的,在RSA公钥中包含有两个整数信息:e和n。对于明文数字m,计算密文的公式是m的e次方再与n求模。
            BigInteger e = pbk.getPublicExponent();
            BigInteger n = pbk.getModulus();        // 获取明文的大整数
            byte ptext[] = msg.getBytes("utf-8");
            BigInteger m = new BigInteger(ptext);        // 加密明文
            BigInteger c = m.modPow(e, n);
            
            // 打印密文c
            System.out.println("c= " + c);
            
            // 将密文以字符串形式保存在文件中
            String cs = c.toString();
            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("encrypt.dat"), "utf-8"));
            out.write(cs, 0, cs.length());
            out.close();    }    public static void decrypt() throws IOException, ClassNotFoundException
        {
            BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("encrypt.dat"), "utf-8"));
            String ctext = in.readLine();
            BigInteger c = new BigInteger(ctext);
            
            // 获取私钥
            FileInputStream f = new FileInputStream("private.ppk");
            ObjectInputStream b = new ObjectInputStream(f);
            RSAPrivateKey prk = (RSAPrivateKey) b.readObject();
            
            // 获取私钥的参数d,n
            BigInteger d = prk.getPrivateExponent();
            BigInteger n = prk.getModulus();
                
            // 解密明文
            BigInteger m = c.modPow(d, n);
            
            
            // 计算明文对应的字符串并输出。
            byte[] mt = m.toByteArray();
            System.out.println("PlainText is " + new String(mt, "utf-8"));
            
        }    public static KeyPair generateKeyPair() throws NoSuchAlgorithmException
        {
            KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
            final int KEY_SIZE = 1024;
            keyPairGen.initialize(KEY_SIZE, new SecureRandom());
            KeyPair keyPair = keyPairGen.genKeyPair();
            return keyPair;
        }}
      

  2.   

    凯撒加密+Base64--打造安全又高效的加密算法
    http://blog.csdn.net/zhiqiangzhan/archive/2009/10/12/4658106.aspx
    我原创的,不知道漫步满足你的需求。
      

  3.   

    原创代码
    import javax.crypto.Cipher; 
    import javax.crypto.SecretKey; 
    import javax.crypto.SecretKeyFactory; 
    import javax.crypto.spec.DESKeySpec;
    import javax.crypto.spec.IvParameterSpec;import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    public class Coder 
    {
    private String DefualKey = "$J.Smile";

    public Coder(String strKey)
    {
    DefualKey = formatKey(strKey);
    }

    public static String oEncoder(String strKey, String data)
    {
    return new Coder(strKey).Encoder(data);
    }

    public String Encoder(String data)
    {
    String str = desEncrypt(data, DefualKey);
    if (str != null)
    {
    char[] c1 = str.toCharArray();
    char c = 0;
    for (int i=0; i<c1.length; i++)
    {
    if (i%2 != 0)
    {
    c1[i-1] = c1[i];
    c1[i] = c;
    }
    else
    c = c1[i];
    }
    return desEncrypt(new String(c1), DefualKey);
    }
    else
    {
    return null;
    }
    }

    public String Decoder(String data)
    {
    String str = desDecrypt(data, DefualKey);
    if (str != null)
    {
    char[] c1 = str.toCharArray();
    char c = 0;
    for (int i=0; i<c1.length; i++)
    {
    if (i%2 != 0)
    {
    c1[i-1] = c1[i];
    c1[i] = c;
    }
    else
    c = c1[i];
    }
    return desDecrypt(new String(c1), DefualKey);
    }
    else
    {
    return null;
    }
    }
    private static String desEncrypt(String message, String key)
    {
    String str = null;
    try 
    {
    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
    DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
    SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
    IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
    cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
    str = new BASE64Encoder().encode(cipher.doFinal(message.getBytes("UTF-8")));
    }
    catch(Exception e) 
    {
    e.printStackTrace();
    }
    return str;
    }

    private String desDecrypt(String message, String key)
    {
    String str = null;
    try 
    {
    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
    DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
    SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
    IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
    cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
    str = new String(cipher.doFinal(new BASE64Decoder().decodeBuffer(message)));
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    return str;
    }

    private String formatKey(String inKey)
    {
    if (inKey == null || inKey.equals(""))
    inKey = this.DefualKey;
    else
    inKey = "########" + inKey;
    int iKeyLength = inKey.length();
    return inKey.substring(iKeyLength-8, iKeyLength);
    }

    public static void main(String[] args)
    {
    Coder coder = new Coder("secretKey");
    System.out.println(coder.Encoder("password"));
    System.out.println(coder.Decoder(coder.Encoder("password")));

    Coder coder2 = new Coder("secretKey");
    System.out.println(coder2.Decoder(coder.Encoder("password")));
    }
    }