我正在使用第三方平台创建落地页,出于业务需求,必须使用此特定平台。
在他们的页面上,我可以通过请求参数加密数据并将其发送到我的服务器。这是通过AES对称加密完成的。
我需要指定密码、盐(必须是十六进制值)和初始化向量(必须是16个字符)。
他们的后端是.NET平台。我知道这一点,因为如果我指定的IV比它期望的长度长,底层异常会是:
System.Security.Cryptography.CryptographicException:指定的初始化向量(IV)与此算法的块大小不匹配。 来源:mscorlib
例如,在他们的端上,我指定:
EncryptSymmetric("Hello World","AES","P4ssw0rD","00010203040506070809", "000102030405060708090A0B0C0D0E0F")
其中输入分别是:明文、算法、密码短语、盐和IV。
我得到的值是:eg/t9NIMnxmh412jTGCCeQ==
如果我尝试使用JCE或BouncyCastle提供程序在本地解密此内容(使用相同的算法、密码短语、盐和IV,进行1000次迭代),我得到的结果是:2rrRdHwpKGRenw8HKG1dsA==,完全不同。
我查看了许多不同的Java示例,以了解如何解密AES。其中一种演示如下:http://blogs.msdn.com/b/dotnetinterop/archive/2005/01/24/java-and-net-aes-crypto-interop.aspx 我如何解密.NET框架在Java平台上生成的使用密码短语、盐和IV的AES对称加密?
如果我能在Java端生成相同的签名并进行比较(如果这里实际生成的是哈希值),则不一定需要能够解密加密字符串的内容。
我正在生产中使用JDK 1.5,因此需要使用1.5来完成此操作。
作为一份附注,许多 Java 示例需要在 Java 端指定重复计数,但在 .NET 端则不需。我需要在 Java 端指定符合默认 .NET 输出的标准迭代次数吗?
在他们的页面上,我可以通过请求参数加密数据并将其发送到我的服务器。这是通过AES对称加密完成的。
我需要指定密码、盐(必须是十六进制值)和初始化向量(必须是16个字符)。
他们的后端是.NET平台。我知道这一点,因为如果我指定的IV比它期望的长度长,底层异常会是:
System.Security.Cryptography.CryptographicException:指定的初始化向量(IV)与此算法的块大小不匹配。 来源:mscorlib
例如,在他们的端上,我指定:
EncryptSymmetric("Hello World","AES","P4ssw0rD","00010203040506070809", "000102030405060708090A0B0C0D0E0F")
其中输入分别是:明文、算法、密码短语、盐和IV。
我得到的值是:eg/t9NIMnxmh412jTGCCeQ==
如果我尝试使用JCE或BouncyCastle提供程序在本地解密此内容(使用相同的算法、密码短语、盐和IV,进行1000次迭代),我得到的结果是:2rrRdHwpKGRenw8HKG1dsA==,完全不同。
我查看了许多不同的Java示例,以了解如何解密AES。其中一种演示如下:http://blogs.msdn.com/b/dotnetinterop/archive/2005/01/24/java-and-net-aes-crypto-interop.aspx 我如何解密.NET框架在Java平台上生成的使用密码短语、盐和IV的AES对称加密?
如果我能在Java端生成相同的签名并进行比较(如果这里实际生成的是哈希值),则不一定需要能够解密加密字符串的内容。
我正在生产中使用JDK 1.5,因此需要使用1.5来完成此操作。
作为一份附注,许多 Java 示例需要在 Java 端指定重复计数,但在 .NET 端则不需。我需要在 Java 端指定符合默认 .NET 输出的标准迭代次数吗?