Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript cryptojs.decrypt返回空结果_Javascript_Typescript_Aes_Cryptojs_Ecb - Fatal编程技术网

Javascript cryptojs.decrypt返回空结果

Javascript cryptojs.decrypt返回空结果,javascript,typescript,aes,cryptojs,ecb,Javascript,Typescript,Aes,Cryptojs,Ecb,我需要用JavaScript解密一条十六进制消息,该消息的结果与用Java编写的代码完全相同。但是,使用CryptoJs的Javascript版本返回一个空结果 Java代码: private static void create() { byte[] sessionKey = fromHexString("dae25b4defd646cd99b7b95d450d6646"); byte[] data = fromHexString("2700012

我需要用JavaScript解密一条十六进制消息,该消息的结果与用Java编写的代码完全相同。但是,使用CryptoJs的Javascript版本返回一个空结果

Java代码:

private static void create()
{
    byte[] sessionKey = fromHexString("dae25b4defd646cd99b7b95d450d6646");
    byte[] data = fromHexString("2700012e27999bdaa6b0530375be269985a0238e5e4baf1528ebaf34a8e5e8c13a58b25bcb82514ee6c86c02ff77ac52bdbd88");

    byte[] payload_data = new byte[48];
    byte[] decrypted_data = new byte[48];

    for(int i=0;i<48;i++) {
        payload_data[i]= data[3+i];
    }


    try{
        SecretKeySpec skeySpec = new SecretKeySpec(sessionKey, "AES");
        Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
        cipher.init(Cipher.DECRYPT_MODE, skeySpec);
        decrypted_data = cipher.doFinal(payload_data);

    }catch(Exception e){
        System.out.println(e);
    }

    String my_data = byteArrayToHex(decrypted_data);
    System.out.println(my_data);
}

private static String byteArrayToHex(byte[] a) {
    StringBuilder sb = new StringBuilder(a.length * 2);
    for(byte b: a)
        sb.append(String.format("%02X", b));
    return sb.toString();
}

private static byte[] fromHexString(String src) {
    byte[] biBytes = new BigInteger("10" + src.replaceAll("\\s", ""), 16).toByteArray();
    return Arrays.copyOfRange(biBytes, 1, biBytes.length);
}

你知道哪里有问题吗?

使用CryptoJS进行解密的过程如下所示:

函数解密(){
var sessionKey='dae25b4defd646cd99b7b95d450d6646';
风险值数据='2700012E27999BDAA6B053075BE269985A0238E5E4BAF1528EBAF34A8E5E8C13A58B25BCB82514EE6C86C02FF77AC52BD88';
var payload_data=data.substr(6);
var decrypted=CryptoJS.AES.decrypt(
有效载荷数据,
CryptoJS.enc.Hex.parse(sessionKey),
{
格式:CryptoJS.format.Hex,
模式:CryptoJS.mode.ECB,
填充:CryptoJS.pad.NoPadding,
}
).toString(CryptoJS.enc.Hex);
log(解密的.replace(/(.{48})/g,'$1\n');
}
解密()

有效!!谢谢仍然不太清楚我在示例中犯了什么错误:(@KobeLeysen-我在更新部分的回答中添加了错误所在的代码以及需要进行哪些更改。
import * as cryptojs from 'crypto-js';

export function create() {
  const sessionKey = Buffer.from('dae25b4defd646cd99b7b95d450d6646', 'hex');
  const data = Buffer.from('2700012e27999bdaa6b0530375be269985a0238e5e4baf1528ebaf34a8e5e8c13a58b25bcb82514ee6c86c02ff77ac52bdbd88', 'hex');

  const payloadData = Buffer.alloc(48);

  for (let i = 0; i < 48; i += 1) {
    payloadData[i] = data[3 + i];
  }

  const decrypted = cryptojs.AES.decrypt(
    cryptojs.enc.Hex.parse(toHexString(payloadData)),
    cryptojs.enc.Hex.parse(toHexString(sessionKey)),
    {
      mode: cryptojs.mode.ECB,
      padding: cryptojs.pad.NoPadding,
    }
  ).toString(cryptojs.enc.Hex);

  console.log({
    decrypted,
  });
}

function toHexString(byteArray) {
  // eslint-disable-next-line no-bitwise
  return Array.prototype.map.call(byteArray, byte => `0${(byte & 0xff).toString(16)}`.slice(-2)).join('');
}
{ decrypted: '' }