AES(Advanced Encryption Standard)加密作为对称密钥加密中最流行的算法之一,应用在重要的数据接口传输中,然而在对接双方分别使用Java和C#作为编程语言时,对接过程往往会出现各种问题,下面分别是这两种语言的实现,已实现加解密互通。
这里采用的加解密使用base64转码方法,ECB模式,PKCS5Padding填充,无向量,密码必须是16位,否则会报错
模式:Java的ECB对应C#的System.Security.Cryptography.CipherMode.ECB
填充方法:Java的PKCS5Padding对应C#System.Security.Cryptography.PaddingMode.PKCS7
编码指定采用UTF-8
Java
C#
后记
在Java中的AES实现里,可以看到 key 的简单实现是:
new SecretKeySpec(key.getBytes("utf-8"), "AES")
但是网上搜到很多的实现方案如下:
这里实际上是调用了Java内部的密钥生成器来生成密钥,输入一个任意位数的seed,可以生成一个128bit的密钥,但是在C#中没有类似的实现,因此如果Java方使用了以上的密钥生成器来生成的密钥,则需要将密钥生成器生成的密钥告知C#方,双方才能正常通信
当然,简单的处理方式如同上文,即Java方不要使用密钥生成器,而是直接使用双方约定的16位密钥