1、对称加密
加密和解密使用同一把密钥,主要算法有DES、AES等
对称加密常用的数学运算:
移位和循环移位:移位就是按照一定规则整体性左移或右移(凯撒密码),循环右移就是将最后一位移到最前头,循环左移刚好相反
置换:将数码中的某一位根据置换表的规定,用另一位替代(ip置换)
扩展:拓展出更长的数码
压缩:与扩展相反
迭代:多次重复相同的运算,使得密文更难以被破解
异或:一个数,两次异或后会得到原数本身
以下代码以异或为例:
//str为需要加密的字符串,encryptCode为秘钥
public static String xor(String str, int encryptCode) {
char[] chs = str.toCharArray();
for (int i = 0; i < chs.length; i++) {
chs[i] = (char) (chs[i] ^ encryptCode);
}
return new String(chs);
}
DES算法:
分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用同一个算法,秘钥长度为56位,8为作为校验码,不参与运算。
加密:
//1.提供明文
String text = "abc";
//2.提供原始秘钥:长度64位
String key = "12345678";
//3、获取加密算法工具类
Cipher des = Cipher.getInstance("DES");
//4、初始化
des.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes(), "DES"));
//5、加密
byte[] bytes = des.doFinal(text.getBytes());
System.out.println(new String(bytes));
解密:
//解密
des.init(Cipher.DECRYPT_MODE,new SecretKeySpec(key.getBytes(),"DES"));
byte[] bytes1 = des.doFinal(bytes);
System.out.println(new String(bytes1));
AES算法:
AES旨在取代DES成为广泛使用的标准,AES使用的分组大小为128位,密钥长度可以为128、192、256bit,最简单常用的是128bit的秘钥。其加密过程涉及到四种操作:字节替代、行移位、列混淆和轮秘钥加。
加密:
//1.提供明文
String text