几年前总结的了,搬到这儿来吧。。。


  1. 单向加密(信息摘要)---用来验证文件是否被修改
  • 说白了就是通过明文生成一个16进制字符串的密文,不可逆,只是对原始对象生成摘要信息.
  • 加密算法: "MD2", "MD5", "SHA1", "SHA-256", "SHA-384", "SHA-512"
  • String a="abc";
    MessageDigest md=MessageDigest.getInstance("MD5");
    byte[] bi=a.getBytes();
    md.update(bi);
    System.out.println("字符:"+a+",摘要:"+new String(md.digest()));
  1. 双向加密---一般用来验证个人或者机构,也可以用来验证文件是否被修改
  • 双向加密大体意思就是明文加密后形成密文,可以通过算法还原成明文.
  1. 对称加密
  • 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
  • 算法是一组规则,规定如何进行加密和解密。因此对称式加密本身不是安全的。
  • 常用的对称加密有:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等
  • 解密时要用Cipher cipher=Cipher.getInstance("DES");构造方法新生成一个Cipher,否则会报错
  • String b="def";
•  System.out.println("字符串:"+b);
 KeyGenerator keyg=KeyGenerator.getInstance("DES");//KEY生成器
 SecretKey key=keyg.generateKey();//密钥
 Cipher c=Cipher.getInstance("DES");//加密解密类
 c.init(Cipher.ENCRYPT_MODE, key);//加密或者解密初始化
 String enstr=new String(c.doFinal(b.getBytes()));//加密
 System.out.println("加密了...:"+enstr);
 System.out.println(".....");
 Cipher d=Cipher.getInstance("DES");
 d.init(Cipher.DECRYPT_MODE, key);//解密初始化
 System.out.println("解密了..."+new String(d.doFinal(enstr.getBytes())));
  1. 非对称加密
  • 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥 (privatekey)。
  • 公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 
  • RSA 公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

• String me="abcd";
 System.out.println("明文是:" + me);
 KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");
 KeyPair kp =kpg.generateKeyPair();
 RSAPublicKey rpubk=(RSAPublicKey)kp.getPublic();
 RSAPrivateKey rprik=(RSAPrivateKey)kp.getPrivate();
 Cipher c=Cipher.getInstance("RSA");
 c.init(Cipher.ENCRYPT_MODE,rpubk);
 byte[] enstr = c.doFinal(me.getBytes());
 String str =new String(enstr);
 System.out.println("加密后是:" + str);
 Cipher d=Cipher.getInstance("RSA");
 d.init(Cipher.DECRYPT_MODE,rprik);
 System.out.println("解密后是:" + new String(d.doFinal(enstr)));
  • Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。
  • DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却做不到。