加密算法的分类:
1.对称加密 DES,AES
2.非对称加密 RSA, DSA,
3.单向加密 MD5, SHA
对称加密的特点:
1.双方使用相同的密钥,解密方事先必须知道加密密钥
2. 加密时使用什么密钥,解密时必须使用相同的密钥
3. 对同样的信息,使用不同的密钥,加密结果理论上不相同
在DES中,使用了一个56位的密钥以及附加的8为奇偶校验位,惨升最大64位的分组大小。攻击DES,一般只能使用穷举的密钥搜索,即重复尝试各种密钥直到有一个符合为止。
3DES,即三重DES,是DES的加强版,也是DES的一个更安全的变形,它使用了3条56位的密钥对数据进行三次加密,一般情况下,提供较强的安全性。
加密步骤:
1.指明机密算法的提供机构
Security.addProvider(new com.sun.crypto.provider.SunJce());
2. 实例化一个密钥生成器
KeyGenerator keygen = KeyGenerator.getInstance("DESede");
3.生成密钥
SecretKey desKey = keygen.generateKey();
4.定义一个Cipher对象,用他来加密、解密
Cipher c = Cipher.getInstance("DESede");
5. 对Cipher对象初始化,指明密钥,加密/解密模式
c.init( Cipher.ENCRYPT_MODE, deskey);
6. 加密需要将明文转换成byte流
byte[] src = msg.getBytes();
byte[] enc = c.doFinal();
7.输出加密信息,字节流转换成字符串 String result = String(enc);
非对称机密:
在非对称加密算法过程中,接受方产生一个公开密钥和一个私有密钥,前者公开,发送方将明文用接收方的公开密钥进行处理,变成米问发送出去,接收方接到密文后,使用自己的私有密钥堆密文解密,恢复为明文。
加密过程和解密过程几乎和DES类似,只是在生成密钥的时候,生成一对密钥,公钥用于加密,私钥用于解密。
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
KeyPairGen.initizlize(1024);
KeyPair keyPair = KeyPairGen.generateKeyPair();
RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate();
RSAPublicKey publickey = (RSAPublicKey)keyPair.getPublic();
单向加密算法的特点:
1. 加密算法对同一消息反复执行该函数总得到相同的定义
2. 加密算法生成的密文是不可预见的,密文看起来和明文没有任何关系
3. 明文的任何微小变化都会对生成的密文产生很大的影响
4. 具有不可逆性
步骤:
1. 根据MD5算法生成MessageDigest对象
2. 更新摘要
3. 完成哈希计算,得到结果
SHA加密和MD5是一样的。