![](/img/trans.png)
[英]How to Encrypt the string using AES256 algorithm in c# and decrypt the same in java
[英]How to encrypt with phpseclib and decrypt with java using AES algorithm
我必须对运行php脚本的服务器上的数据进行加密,然后使用AES算法将它们发送到另一台运行Java的服务器上。 我选择分别对php和Java端使用phpseclib和javax.crypto
包。 不幸的是有填充例外。 这是我的代码:
在php端:
$aes = new Crypt_AES('MODE_ECB');
$key = "secretkeyfor1234secretke";
$aes->setKey($key);
$plaintext = 'Good evening this is just a test';
$cryptedmessage = base64_encode($aes->encrypt($plaintext));
在Java方面:clefAES包含密钥,数据包含密文。 我使用RSA加密发送密钥(此处未报告)。
data = EFjTatx2VkAZR3ScS0UadQr8M6zEkIz/kAX0Cl+XH2FNNHVbeJsEd2b+zWlEkvR6;//( it is base64 encoded )
Cipher aescipher = Cipher.getInstance("AES/ECB/NoPadding", "SunJCE");
Key keySpec = new SecretKeySpec(clefAES, "AES");
byte[] encryptedTextByte = decoder.decodeBuffer(data);
aescipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decryptedByte = aescipher.doFinal(encryptedTextByte);
String decryptedText = new String(decryptedByte);
这是解密的文本给出的结果:
晚上好,#3mg。? 我#ԀOq
如果有人知道我为什么得到这个结果以及如何解决这个问题,那将非常有帮助。 phpseclib是否与javax.crypto软件包兼容以进行AES加密? 这是我想要实现的最佳方法吗?
这是我从您的PHP代码获得的输出:
GYQGpH6fRpHBP0ACElbcp1nvcS0ojcqzvnqclHxvB+BtgM4KEH+K7Q2F6rhEx0hM
这与您要传递给Java代码的内容形成对比。
另外,您的PHP代码没有执行ECB模式。 它正在执行CBC模式。 这是因为new Crypt_AES('MODE_ECB');
不是您需要使用的代码。 相反,这是执行ECB模式所需的代码:
new Crypt_AES(CRYPT_MODE_ECB);
另外,默认情况下phpseclib正在执行填充。 要禁用它,您需要执行以下操作:
$aes->disablePadding();
说完之后,我将其作为输出:
GYQGpH6fRpHBP0ACElbcp9i8pjKf4G7wiPLDL7TM1Ec=
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.