几年前总结的了,搬到这儿来吧。。。
- 单向加密(信息摘要)---用来验证文件是否被修改
- 说白了就是通过明文生成一个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()));
- 双向加密---一般用来验证个人或者机构,也可以用来验证文件是否被修改
- 双向加密大体意思就是明文加密后形成密文,可以通过算法还原成明文.
-
- 对称加密
- 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
- 算法是一组规则,规定如何进行加密和解密。因此对称式加密本身不是安全的。
- 常用的对称加密有: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())));
- 非对称加密
- 对称加密
-
-
- 非对称加密算法需要两个密钥:公开密钥(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)));
- String me="abcd";
- Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。
- DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却做不到。
-