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>
阅读 5.9k
2 个回答
新手上路,请多包涵

java 的byte类型是有符号的
一般加密算法出现问题基本就是这个原因,你可以查找一下试试.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题