nodejs和java中的des/3des加密解密

编程入门 行业动态 更新时间:2024-10-04 07:21:56

nodejs和java中的des/3des<a href=https://www.elefans.com/category/jswz/34/1769177.html style=加密解密"/>

nodejs和java中的des/3des加密解密

Java和nodejs中des/3des加解密数据互操作,直接上代码(仅供参考):
JS代码如下:

var assert = require('assert');  
var crypto = require('crypto');  function test_des(param) {  var key = new Buffer(param.key);  var iv = new Buffer(param.iv ? param.iv : 0)  var plaintext = param.plaintext  var alg = param.alg  var autoPad = param.autoPad  //encrypt  var cipher = crypto.createCipheriv(alg, key, iv);  cipher.setAutoPadding(autoPad)  //default true  var ciph = cipher.update(plaintext, 'utf8', 'hex');  ciph += cipher.final('hex');  console.log(alg, ciph)  //decrypt  var decipher = crypto.createDecipheriv(alg, key, iv);  cipher.setAutoPadding(autoPad)  var txt = decipher.update(ciph, 'hex', 'utf8');  txt += decipher.final('utf8');      assert.equal(txt, plaintext, 'fail');  
}  test_des({  alg: 'des-ecb',  autoPad: true,  key: '01234567',  plaintext: '1234567812345678',  iv: null  
})  test_des({  alg: 'des-cbc',  autoPad: true,  key: '01234567',  plaintext: '1234567812345678',  iv: '12345678'  
})  test_des({  alg: 'des-ede3',    //3des-ecb  autoPad: true,  key: '0123456789abcd0123456789',  plaintext: '1234567812345678',  iv: null  
})  test_des({  alg: 'des-ede3-cbc',    //3des-cbc  autoPad: true,  key: '0123456789abcd0123456789',  plaintext: '1234567812345678',  iv: '12345678'  
})  

Java代码

import javax.crypto.Cipher;  
import javax.crypto.SecretKey;  
import javax.crypto.spec.IvParameterSpec;  
import javax.crypto.spec.SecretKeySpec;  import org.apachemons.codec.binary.Hex;  
import org.junit.Test;  @Test  public void encrypt_3des_ecb() throws Exception {  byte[] key = "0123456789abcd0123456789".getBytes();       byte[] plainText = "1234567812345678".getBytes();  //      KeySpec myKeySpec = new DESedeKeySpec(key);  
//      SecretKeyFactory mySecretKeyFactory = SecretKeyFactory.getInstance("DESede");  
//      SecretKey secretKey = mySecretKeyFactory.generateSecret(myKeySpec);  SecretKey secretKey = new SecretKeySpec(key, "DESede");  //encrypt  Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");  cipher.init(Cipher.ENCRYPT_MODE, secretKey);  byte[] encryptedData = cipher.doFinal(plainText);  System.out.println("encrypt_3des_ecb: " + Hex.encodeHexString(encryptedData));  //decrypt  cipher.init(Cipher.DECRYPT_MODE, secretKey);  byte[] decryptPlainText = cipher.doFinal(encryptedData);  org.junit.Assert.assertArrayEquals(decryptPlainText, plainText);          }  @Test  public void encrypt_3des_cbc() throws Exception {  byte[] key = "0123456789abcd0123456789".getBytes();       byte[] plainText = "1234567812345678".getBytes();  IvParameterSpec iv = new IvParameterSpec("12345678".getBytes());  SecretKey secretKey = new SecretKeySpec(key, "DESede");  //encrypt  Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");  cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);  byte[] encryptedData = cipher.doFinal(plainText);  System.out.println("encrypt_3des_cbc: " + Hex.encodeHexString(encryptedData));  //decrypt  cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);  byte[] decryptPlainText = cipher.doFinal(encryptedData);  org.junit.Assert.assertArrayEquals(decryptPlainText, plainText);              }     @Test  public void encrypt_des_ecb() throws Exception {  byte[] key = "01234567".getBytes();       byte[] plainText = "1234567812345678".getBytes();  SecretKey secretKey = new SecretKeySpec(key, "DES");  //encrypt  Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");  cipher.init(Cipher.ENCRYPT_MODE, secretKey);          byte[] encryptedData = cipher.doFinal(plainText);  System.out.println("encrypt_des_ecb: " + Hex.encodeHexString(encryptedData));  //decrypt  cipher.init(Cipher.DECRYPT_MODE, secretKey);  byte[] decryptPlainText = cipher.doFinal(encryptedData);  org.junit.Assert.assertArrayEquals(decryptPlainText, plainText);  }  @Test  public void encrypt_des_cbc() throws Exception {  byte[] key = "01234567".getBytes();       byte[] plainText = "1234567812345678".getBytes();  IvParameterSpec iv = new IvParameterSpec("12345678".getBytes());   SecretKey secretKey = new SecretKeySpec(key, "DES");  //encrypt  Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");  cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);          byte[] encryptedData = cipher.doFinal(plainText);  System.out.println("encrypt_des_cbc: " + Hex.encodeHexString(encryptedData));  //decrypt  cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);  byte[] decryptPlainText = cipher.doFinal(encryptedData);  org.junit.Assert.assertArrayEquals(decryptPlainText, plainText);  } 

结果:
nodejs 输出结果
des-ecb cb22e0c49a73e0e0cb22e0c49a73e0e008bb5db6b37c06d7
des-cbc 388d44f8b0f709c0915e14abc8eb782604ae07d96110ab0d
des-ede3 0a5f769c1a6eb5710a5f769c1a6eb5713bba29a037c699da
des-ede3-cbc 99988858eabe3e95ace8349b9e19dda66abb82b44b5f8f62

java输出结果
encrypt_des_ecb: cb22e0c49a73e0e0cb22e0c49a73e0e008bb5db6b37c06d7
encrypt_des_cbc: 388d44f8b0f709c0915e14abc8eb782604ae07d96110ab0d
encrypt_3des_ecb: 0a5f769c1a6eb5710a5f769c1a6eb5713bba29a037c699da
encrypt_3des_cbc: 99988858eabe3e95ace8349b9e19dda66abb82b44b5f8f62

更多推荐

nodejs和java中的des/3des加密解密

本文发布于:2024-02-28 12:06:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1769515.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:加密解密   nodejs   java   des

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!