我想使用TripleDES在我的ASP.NET应用程序和另一个开发人员的CF应用程序之间交换加密的数据。TripleDES加密 - .NET和ColdFusion打得不好
这是他的CF代码(虚拟键当然IV):
<cfset variables.theKey = "rpaSPvIvVLlrcmtzPU9/c67Gkj7yL1S5">
<cfset variables.theIV = BinaryDecode("password","Base64")>
<cfset variables.theAlgorithm = "DESEDE">
<cfset variables.theEncoding = "Base64">
<cfif IsDefined("form.string") and IsDefined("form.method")>
<cfif form.method is "encrypt">
<cfset variables.theString = encrypt(form.string, variables.theKey, variables.theAlgorithm, variables.theEncoding, variables.theIV)>
</cfif>
<cfif form.method is "decrypt">
<cfset variables.theString = decrypt(form.string, variables.theKey, variables.theAlgorithm, variables.theEncoding, variables.theIV)>
</cfif>
<cfoutput><p>Output: #variables.theString#</cfoutput>
</cfif>
这里是我的VB.NET(我省略了异常处理等):
Private IV() As Byte = ASCIIEncoding.ASCII.GetBytes("password")
Private EncryptionKey() As Byte = Convert.FromBase64String("rpaSPvIvVLlrcmtzPU9/c67Gkj7yL1S5")
Public Function EncryptString(ByVal Input As String) As String
Dim buffer() As Byte = Encoding.UTF8.GetBytes(Input)
Dim des As TripleDESCryptoServiceProvider = New TripleDESCryptoServiceProvider
des.Key = EncryptionKey
des.IV = IV
Return Convert.ToBase64String(des.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length()))
End Function
Public Function DecryptString(ByVal Input As String) As String
Dim buffer() As Byte = Convert.FromBase64String(Input)
Dim des As TripleDESCryptoServiceProvider = New TripleDESCryptoServiceProvider
des.Key = EncryptionKey
des.IV = IV
Return Encoding.UTF8.GetString(des.CreateDecryptor().TransformFinalBlock(buffer, 0, buffer.Length()))
End Function
我们会得到不同的结果。
想到的最明显的一点是,他使用的Base64创建从密码IV,而我使用的ASCII - 但如果我这样做
Private IV() As Byte = Convert.FromBase64String("password")
那么.NET并不开心,因为它为IV获得一个6字节的数组,并且它需要8个字节。
任何想法我们做错了 - 最好改变我可以使我的(VB.NET)代码,使这项工作?或者失败了,在两种环境之间可以更好地工作的另一种方法?
@赫伯 - 只是一个猜测,但也许他们的第四被忽略。无论是否有IV,我都会得到相同的结果。该文件说“[IV] ..该算法必须包含除ECB以外的反馈模式。”这似乎表明,除非您提供不同的反馈模式,否则不会使用IV。 – Leigh 2009-09-25 18:41:41
我曾经和客户有过同样的问题(我在CF上,他在.NET上)。我们最终放弃了并使用了AES,并为我们工作。 – ryber 2009-10-02 12:48:21