Encryption SagePay AES表单集成

Encryption SagePay AES表单集成,encryption,aes,opayo,Encryption,Aes,Opayo,我有一个工作表单集成,但需要转移到V3.00的表单集成,它需要AES编码而不是Xor。示例代码是一个J2EE应用程序,它隐藏了加密方法。SagePay支持无法提供用于加密/解密的API类/方法;我怀疑他们在那里,如果有人使用过他们,并能就此提出建议 或者,我尝试用自己的代码进行加密。同样,SagePay还没有发布,因为他们没有提供足够的关于加密是如何完成的信息。我相信我已经计算出他们提供的密码用于加密密钥和iv,尽管他们在集成指南中没有说明这一点。这是我尝试过的编码指令代码 by

我有一个工作表单集成,但需要转移到V3.00的表单集成,它需要AES编码而不是Xor。示例代码是一个J2EE应用程序,它隐藏了加密方法。SagePay支持无法提供用于加密/解密的API类/方法;我怀疑他们在那里,如果有人使用过他们,并能就此提出建议

或者,我尝试用自己的代码进行加密。同样,SagePay还没有发布,因为他们没有提供足够的关于加密是如何完成的信息。我相信我已经计算出他们提供的密码用于加密密钥和iv,尽管他们在集成指南中没有说明这一点。这是我尝试过的编码指令代码

        byte[] byteDataToEncrypt = inString.getBytes();
        final byte[] keyBytes = webSite.encryptionPassword().getBytes("ASCII");
        final byte[] ivBytes = webSite.encryptionPassword().getBytes("ASCII");
        final SecretKey key = new SecretKeySpec(keyBytes, "AES");
        final IvParameterSpec iv = new IvParameterSpec(ivBytes);
        final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

        cipher.init(Cipher.ENCRYPT_MODE, key, iv);
        byte[] byteCipherText = cipher.doFinal(byteDataToEncrypt);
        byte[] aesEncryptedBase64encoded = Base64.encodeBase64(byteCipherText);
            String crypt = "@" + new String(aesEncryptedBase64encoded);
我不知道为什么@需要出现在前面,但我已经在其他代码中看到了它,这些代码已经发布在网上,用于SagePay集成。没有它,SagePay测试服务器告诉我加密方法无法识别。有了它,它告诉我货币字段丢失了,尽管我知道货币字段在源代码中被设置为ok“GBP”,并且我正在使用提供的测试服务器密码

无论是SagePay还是开发者社区都非常感谢您的帮助。
John

对我有效的解决方案是替换这个:

byte[] aesEncryptedBase64encoded = Base64.encodeBase64(byteCipherText);
String crypt = "@" + new String(aesEncryptedBase64encoded);
用这个

String crypt = "@" + Hex.encodeHexString(byteCipherText);
或者,如果直接使用SagePay API,则将所有代码替换为以下两行:

byte[] aesEncrypted = CryptographyHelper.AESEncrypt(detail, "ISO-8859-1", password);  
String crypt = "@" + Hex.encodeHexString(aesEncrypted);

即使移动到4.00版,此选项也有效。对于4.00版,唯一需要区别的是它需要加密的字符串是大写的。因此而不是

String crypt = "@" + Hex.encodeHexString(byteCipherText);
这需要

String crypt = "@" + Hex.encodeHexString(byteCipherText).toUpperCase();
最新的Sagepay/Opayo文档至少口头列出了所有需要的内容,即使它还不是很全面,再加上这段代码,我也可以解决它。 谢谢