Java和PHP之间的加密/解密字符串
我正在使用AES加密来加密和解密服务器端的php和Android应用程序(作为客户端)之间的字符串。
PHP中的加密字符串是:
HaxRKnMxT24kCJWUXaVvqDHahzurJQK+sYA4lIHql/U=
在Java中它是:
HaxRKnMxT24kCJWUXaVvqD/KMEkJTPTXEcCsHIYGX9TGtCNOHQcJyUURPk8qlgf3
我在PHP脚本中使用phpseclib来进行加密。
我在这里想念的是什么?
这里有相关的Java代码
SecretKeySpec skeySpec = new SecretKeySpec(pad16(pass), "AES"); Cipher c = Cipher.getInstance("AES"); c.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] out = c.doFinal( input )
这里的PHP代码:
$aes = new Crypt_AES(); $aes->setKey('password'); $encrypted_encoded_text = base64_encode($aes->encrypt($plaintext));
为了使加密/解密能够跨不同语言工作,很少有东西需要相同。
- 加密算法(呃!)
- 钥匙(呃,再次!)
- 密钥大小
- 运作模式(ECB,CBC,CTR)
- 初始化向量(如果是CBC,则不需要ECB)
-
填充方案
也许还有一些因素……
你确定这两种语言都是一样的吗? 如果是,那么您的加密/解密应该完美无缺,除非实施中存在错误(这是非常罕见但可能的)。
- Java BC SicBlockCipher直接输出等效于c#
- 如何正确使用“PBEWithHmacSHA512AndAES_256”算法?
- 使用相同的密钥解密AES时BadPaddingException
- 带有Bouncy Castle的256位AES / CBC / PKCS5Padding
- GSSexception:不支持/启用具有HMAC SHA1-96的加密类型AES256CTS模式
- 如何处理AES CTR的IV / Nonce / Counter?
- 如何解密从Mifare Desfire EV1发送的第一条消息
- Java AES:没有安装的提供程序支持此密钥:javax.crypto.spec.SecretKeySpec
- 如何修复无效的AES密钥长度?