在 NetSuite Suitescript 中加密并在 java 应用程序中解密

Encrypting in NetSuite Suitescript and decrypting in java application

我需要使用 SuiteScript 加密字符串,将其发送到用 Java 编写的网络服务,然后在那里解密。

使用 SuiteScript,我可以毫无问题地进行加密和解密。但是当我在 java 中使用相同的密钥时,我会得到不同的错误。

var x = "string to be encrypted";
var key = 'EB7CB21AA6FB33D3B1FF14BBE7DB4962';
var encrypted = nlapiEncrypt(x,'aes',key);
var decrypted = nlapiDecrypt(encrypted ,'aes',key);

^^工作正常^^

代码在Java

final String strPassPhrase = "EB7CB21AA6FB33D3B1FF14BBE7DB4962"; //min 24 chars

    SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");
    SecretKey key = factory.generateSecret(new DESedeKeySpec(strPassPhrase.getBytes()));
    Cipher cipher = Cipher.getInstance("DESede");

    cipher.init(Cipher.DECRYPT_MODE, key);

    String encrypted = "3764b8140ae470bda73f7ebed3c33b0895f70c3497c85f39043345128a4bc3b3";
    String decrypted = new String(cipher.doFinal(DatatypeConverter.parseBase64Binary(encrypted)));
    System.out.println("Text Decryted : " + decrypted);

使用上面的代码,我得到一个异常javax.crypto.BadPaddingException: Given final block not properly padded

密钥是使用 openssl 生成的

openssl enc -aes-128-ecb -k mypassphrase -P

看起来你是用AES加密,用DES解密。我认为密文需要使用与加密相同的对称算法进行解密。

目前看来您可以使用 Suitescript 来解密使用 SuiteScript 加密的消息。 查看套件答案:35099

建议的解决方法是对 encrypt/decrypt 使用外部 java 脚本库。我们最终在 java 脚本上使用了 OpenJS,但在 java 端必须确保根据 java 脚本端的设置调整默认值。 Java API 在这方面比 java 脚本 API 更灵活。