DES加密算法实现
原创
52cxy
04-04 09:10
阅读数:636
DES,全名为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。密钥长度是64位(bit),超过位数密钥被忽略。所谓对称性加密即加密和解密密钥相同,对称性加密一般会按照固定长度,把待加密字符串分成块,不足一整块或者刚好最后有特殊填充字符。跨语言做 DES 加密解密经常会出现问题,往往是填充方式不对、编码不一致或者加密解密模式没有对应上造成。常见的填充模式有: pkcs5、pkcs7、iso10126、ansix923、zero。加密模式有:DES-ECB、DES-CBC、DES-CTR、DES-OFB、DES-CFB。
在实际开发过程中,不同的开发语言都自带相应的函数来完成加密算法的实现,下面介绍常用的几种开发语言如何完成AES加密算法的加解密操作。
一、PHP
$pass = "123456"; $data = "ItUtil.net"; $iv = '12345678'; //8位 $enData = openssl_encrypt($data, 'DES-CBC', $pass, 0, $iv); $deData = openssl_decrypt($enData, 'DES-CBC', $pass, 0, $iv); var_dump($enData); var_dump($deData);
二、JAVA
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class Des {
public static String encrypt(String content, String KEY, String IV) throws Exception {
try {
byte[] raw = KEY.getBytes("utf-8");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "DES");
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");//"算法/模式/补码方式"
IvParameterSpec ips = new IvParameterSpec(IV.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ips);
byte[] encrypted = cipher.doFinal(content.getBytes());
String result = new Base64().encodeToString(encrypted);
return result;
} catch (Exception ex) {
System.out.println(ex.toString());
return null;
}
}
public static String dencrypt(String content, String KEY, String IV) throws Exception {
try {
byte[] raw = KEY.getBytes("utf-8");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "DES");
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
IvParameterSpec ips = new IvParameterSpec(IV.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, ips);
byte[] encrypted1 = new Base64().decodeBase64(content);
try {
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original);
return originalString;
} catch (Exception e) {
System.out.println(e.toString());
return null;
}
} catch (Exception ex) {
System.out.println(ex.toString());
return null;
}
}
public static void main(String[] args) {
try{
String KEY = "12345678";//必须8位
String data = "ItUtil.net";
String IV = "12345678";//必须8位
String result = encrypt(data, KEY, IV);
System.out.println("加密后密文:"+result);
String result2 = dencrypt(result, KEY, IV);
System.out.println("解密后明文:"+result2);
}
catch(Exception e){
e.printStackTrace();
}
}
}共1条评论
52cxy·2022/06/16
感谢分享。
评论举报