nodejs 和 java 进行 rc4 加密得到的结果不一样
同时在对一个
buffer<03 01 00 00 02 00 00 00>
进行加密。
java 和 c 得到的结果是
CA 66 C4 5D 90 E7 30 01
nodejs 得到的结果是
6f 61 f8 95 ab ba aa 90
不一样 什么原因导致的呢?
java 代码地址 https://ideone.com/V5Nzos
import java.nio.ByteBuffer;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
class Test {
public static void main(String[] args) {
try {
byte[] bs = {
(byte)0x03, (byte)0x01, (byte)0x00, (byte)0x00,
(byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00
};
ByteBuffer buff = ByteBuffer.wrap(bs);
Cipher instance = Cipher.getInstance("RC4");
instance.init(Cipher.DECRYPT_MODE, new SecretKeySpec(("c2eWxyNe5c4G9GUHMQECzcUEWUK8MWkk" + "48LoIDEv8EQOrmwPirikDa3iUaickMSq").getBytes(), "RC4"));
instance.update(buff.array(), 0, 8, buff.array(), 0);
byte[] array = buff.array();
for (int j=0; j<array.length; j++) {
System.out.format("%02X ", array[j]);
}
System.out.println();
//加密结束 结果:CA 66 C4 5D 90 E7 30 01
}catch (Throwable th) {
System.out.println(th);
System.exit(0);
}
}
}
nodejs 代码地址
https://ideone.com/XQVhRM
var crypto = require('crypto');
//en
function cipher (buf) {
var rc4Key = "c2eWxyNe5c4G9GUHMQECzcUEWUK8MWkk"
var cipher = crypto.createCipher('rc4', (rc4Key+"48LoIDEv8EQOrmwPirikDa3iUaickMSq"),1);
var cryptedBuffers = [cipher.update(buf)];
cryptedBuffers.push(cipher.final());
var crypted = Buffer.concat(cryptedBuffers);
return crypted;
};
var buf1 = Buffer.from([
0x03, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
]);
console.log(cipher((buf1)));
//<Buffer 6f 61 f8 95 ab ba aa 90>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
java 的byte类型是有符号的
一般加密算法出现问题基本就是这个原因,你可以查找一下试试.
请问如何解决的这个问题?