微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 java 编写 node js aes cbc pksc5 padding .?

如何解决如何从 java 编写 node js aes cbc pksc5 padding .?

我想从 java aes-cbc-pksc5 padding 编写 node js 脚本。我尝试了所有方法仍然没有运气。 我正在从节点 js 和 java 获取输出,但两个输出都不同

import java.io.ByteArrayOutputStream;
import java.security.spec.AlgorithmParameterSpec;
import java.util.Arrays;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import com.sun.org.apache.xml.internal.security.utils.Base64;
public class AESUtilImpl
{

private static final String ALGORITHM = "AES";
private static final String CIPHER_ALGORITHAM = "AES/CBC/PKCS5PADDING";
private static final String KEY = "29C1EB633ECAB0CA0F52B588AE92EA31";
//Encrypt request
public String aes128Encrypt(String plainText) throws Exception
{
byte[] iv = new byte[] { (byte) 0x8E,0x12,0x39,(byte) 0x9C,0x07,0x72,0x6F,0x5A,(byte) 0x8E,0x5A };
AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);
/** Generate a secret key from the hex string as key */
SecretKeySpec skeySpec = getSecretKeySpecFromHexString(ALGORITHM,KEY);
/** Creating a cipher instance with the algorithm and padding */
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHAM);
cipher.init(Cipher.ENCRYPT_MODE,skeySpec,paramSpec);
/** generating the encrypted result */
byte[] encrypted = cipher.doFinal(plainText.getBytes("UTF-8"));// To add iv in encrypted string.
byte[] encryptedWithIV = copyIVAndCipher(encrypted,iv);
String encryptedResult = Base64.encode(encryptedWithIV);
return encryptedResult; 
}
//Encrypt response
public String aes128Decrypt(String encryptedText) throws Exception
{
SecretKeySpec skeySpec = getSecretKeySpecFromHexString(ALGORITHM,KEY);
byte[] encryptedIVandTextAsBytes = Base64.decode(encryptedText);
/** First 16 bytes are always the IV */
byte[] iv = Arrays.copyOf(encryptedIVandTextAsBytes,16);
byte[] ciphertextByte = Arrays.copyOfRange(encryptedIVandTextAsBytes,16,encryptedIVandTextAsBytes.length);
// Decrypt the message
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHAM);
cipher.init(Cipher.DECRYPT_MODE,new IvParameterSpec(iv));
byte[] decryptedTextBytes = cipher.doFinal(ciphertextByte);
String decryptedResult = new String(decryptedTextBytes,"UTF-8");
return decryptedResult; 
}
private static SecretKeySpec getSecretKeySpecFromHexString(String algoCommonName,String 
hexString) throws Exception {
byte [] encodedBytes = hexStrToByteArray(hexString) ;
 return new SecretKeySpec(encodedBytes,algoCommonName);
}
private static byte[] hexStrToByteArray(String hex) {
 ByteArrayOutputStream baos = new ByteArrayOutputStream(hex.length() / 2);
 for (int i = 0; i < hex.length(); i += 2) {
 String output = hex.substring(i,i + 2); 
 int decimal = Integer.parseInt(output,16); 
 baos.write(decimal);
 }

 return baos.toByteArray();
}
public static byte[] copyIVAndCipher(byte[] encryptedText,byte[] iv) throws Exception {
ByteArrayOutputStream os = new ByteArrayOutputStream();
os.write(iv);
os.write(encryptedText);
return os.toByteArray();
}
}

从java我们得到这个输出

jhI5nAdyb1qOEjmcB3JvWsTxfWxNV9eVgIIRFa2MWLzO4GFpra0NlreEpsKsM13 + DIal8skeA7NF + eJmAoqUYlfRjfXSUUS3GwRS6AZJiG6MGu + bEPRcMj3hh5hWH0UsyGhB1vZ6t1BFVMiz / + VDO + uQdimOAhMHJtf6PiGWq5im + w8sNhIh63RWor9fEXMYx02kzBuxBsAtL3zGzx16YEhC0QYqUJXXiWFugus4 / R847laB6lzIUbo4yNtHVbxP3m8SZOLC9wBYEM / 1RwA6FeiJGyzyJnI5czHtHD67H2pYvtSmeJwsjToC5o0JYV9mvTcXcT / mt2DxSU + WwBZy25udeHKAO5rxDQJxqs0nOne3yJFJrBEtnlMAdbFwR3hgQz8JCa8Rk0cqY74zu94EGvCdmfucPvF6Psve7N91B9vIEi4 + wx8XsxEcOkHqkT + J + VXEeitNCiljLbo + ny9HzC9qKn222mZTpiKiyAQOaatiMZnYCYUzZG + iSquMec7Fa7Jli5WXimf0ZZDmo1NcdxcV22LxpbkDArDNajWm / TF3mSyYk2pFgNVfnNDYfHmnDmUZQxZH3RX7z / w9K4hmPfldfGiZclKjLxVh + xs0KlBXU7lnpeQqA6yK9ELjeH2LUUWnDwHQPL10tRcvMW0ZWWGzkavHCKWdDTuXimRcNZM1m7Y8X1taZwrbMXR7wTtHgrXagtk7JR88jVzV7 / 9zKFpad6zjMnsleNyziGpl9Sn0usPHVTNYk6EKxBXd8V34x39YfOdbxGLzGcc5PRK2DA5Yrlqh / CpoeGAcwxl + xB9Xi1atjBZjKSv59JL + PaWxmHtG02i + ops405xbDM8E9TfiCxYoPmjZaR7g+Al05/j1BkHiNO0ajvUl+1yeqYP/

从节点我得到不同的输出

HYR7ayrrqatGAajlVe / u5Q72l9UV9t2onda2bxkE7qvp1ai5Jvb9APcttuXitR2bKgSq / iv8DbGAc7zRrLH + TVQ / ihuTv6TvED0tiquizrBOetdtKvLiWV1vwuNDHWfkLgoBex83O6o3PkVWVoqJ1rJ / cDFfhpTVruzwHgjPYtVN2 + jQSRrjo9uBSNvkLpBrFEYXAUWepqp + 94GGFECZApMcKZsQ3dQMhZLaMmwyZyCfK3p73kKp9kVb8qABvTdVVCx28cFt0YN1s6i4Qjy6O7C31 / qDF28jYgDAOSZBntufB0m1oDby / BzHTsjCKE6jbpHVEhFF8eXZovOqn0TKk + UY / TioPlWgdiVm9HCTpYn7BD6HSjuZdUtaY3hyUGQE78tLJEwdoNDzwrcj9pRtHe4ZbW7jZBJRDEM5YTxi / x6JJEjQipwGyHZqFHl8rzvnKWgIISclTwsEY + 0hC6m0bw ==

用于加密和解密数据的Node js代码

function encrypt(plainText,keyBase64,ivBase64) {
var key =Buffer.from(keyBase64,'hex')
var iv = Buffer.from(ivBase64,'hex');
var cipher = crypto.createCipheriv('aes-128-cbc',key,iv);
var encryptedData = cipher.update(plainText,'utf8','base64');
encryptedData += cipher.final('base64');
return encryptedData
}

function decrypt(messagebase64,ivBase64) {

const key = Buffer.from(keyBase64,'base64');
const iv = Buffer.from(ivBase64,'base64');

const decipher = crypto.createDecipheriv('aes-128-cbc',iv.slice(0,16));
let decrypted = decipher.update(messagebase64,'base64');
decrypted += decipher.final();
return decrypted;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。