简介
称为“Data Encryption Standard”,中文名为“数据加密标准”,是一种使用密钥加密的块算法。DES 算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是 1972 年美国 IBM 公司研制的对称密码体制加密算法。 明文按 64 位进行分组,密钥长 64 位,密钥事实上是 56 位参与 DES 运算(第8、16、24、32、40、48、56、64 位是校验位, 使得每个密钥都有奇数个 1)分组后的明文组和 56 位的密钥按位替代或交换的方法形成密文组的加密方法。
基本原理
入口参数有三个:key、data、mode。
- key 为加密解密使用的密钥,
- data 为加密 解密的数据,
- mode 为其工作模式。
当模式为加密模式时,明文按照 64 位进行分组,形成明文组,key 用于对数据加密,当模式为解密模式时,key 用于对数据解密。实际运用中,密钥只用到了 64 位中的 56 位,这样才具有高的安全性。
输出
DES 算法把 64 位的明文输入块变为 64 位的密文输出块,它所使用的密钥也是 64 位
在java中,如果所给的密钥不是64位会进行变换得到64位的。
记住:如果是有padding,如果是明文如果是8字节的整数倍的话,加密的密文长度肯定要增加8个字节,因为要有标识
java demo
java中不同的对象中使用的算法名
public static byte[] CBCEncrypt() {
String data = "123";
String key = "123123123";//密钥长度必须大于8个字节
String iv = "12341234";
try {
// 从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key.getBytes());
// 创建一个密匙工厂,然后用它把DESKeySpec转换成
// 一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance("DES/CFB/NoPadding");
//使用nopadding模式,data必须为8字节的整数倍
// Cipher cipher = Cipher.getInstance("DES/CBC/NoPadding");
// 用密匙初始化Cipher对象
IvParameterSpec param = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, secretKey, param);
// 执行加密操作
byte encryptedData[] = cipher.doFinal(data.getBytes());
System.out.println(str16(encryptedData).length());
return encryptedData;
} catch (Exception e) {
System.err.println("DES算法,加密数据出错!");
e.printStackTrace();
}
return null;
}
网友评论