DES加密算法实现
原创
52cxy
04-04 09:10
阅读数:543
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
感谢分享。
评论举报