JAVA和PHP的AES加密有什么区别?为什么加密解密不能互通
加密算法和语言是没有关系的。 所以这个只能解释为你自己的代码有什么问题。
令明文为P, 密文为S, 密钥为K,加密方法为E, 解密方法为D。 我们可以用下面的公式表示加密和解密的过程:
S = E(P, K)
P = D(P, K)
可以看出来, 这是个条件封闭的计算公式, 理论上和语言是没有关系的。
那到底哪里出问题了, 你不贴代码,我也没法给出准确的回复。 不过可以提供一些排查的思路:
把明文, 密钥, 密文打印出来。 比较它们是否一样, 特别要注意前后的空格,可以结束size函数来判断位数是否一样。
如果用相同明文 + 相同密钥得到相同的密文, 说明加密过程是没问题的。 再用上面提到的方法,比较解密的过程。
当某个过程不一致的时候,除了比较字符串, 另外可以看看源码或者换一种实现。 理论上这是不可能的。
希望我的回复能够帮助你,还不明白的话,可以私信我探讨。
涉及到数据加密场景的项目都离不开加密算法,编程语言那么多,每款语言都有自己的加密实现,这就会导致不同开发语言间即使是同一加密算法,可能也无法相互间加解密。
AES是高级加密标准的英文缩写,它是对称加密(加密和解密用的是同一套密钥)算法中最为流行的算法之一,在安全性上优于DES(DES安全性较差)。比如说微信小程序加密方式中就用到了AES加密。

1、AES密钥长度一般是:128位、192位、256位
我们常说的AES128指的就是AES加密密钥长度是128位。密钥长度越长,安全性越高。
2、AES是分组加密的
AES会对固定大小的分组数据进行处理,每次处理16字节的输入,当数据不足16字节长时,就需要进行填充。
上面说到了,AES是分组加密的,当待加密数据长度不定时,为了能在各种场景下安全的使用分组密码,就需要设置工作模式和填充方式。
1、AES加密模式有:ECB(电码本模式)、CBC(密码分组链模式)、OFB(输出反馈模式)、CTR(计数器模式)等。
2、AES填充方式有:NoPadding、PKCS5、PKCS7等。