TripleDES를 사용하여 ASP.NET 응용 프로그램과 다른 개발자의 CF 응용 프로그램간에 암호화 된 데이터를 교환하려고합니다.TripleDES 암호화 - .NET 및 ColdFusion이 좋지 않음
는 여기에 자신의 CF 코드 (가상 키 물론 IV)의 :
가 여기 내 VB.NET의<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>
(I 예외 처리 등을 남겨 두었다) :
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
을 우리 다른 결과를 얻고 있습니다. 마음에 오는
분명한 것은 내가 ASCII를 사용하고있는 반면 그가 암호에서 IV를 만들 Base64로를 사용하고 있다는 것입니다 -하지만이
Private IV() As Byte = Convert.FromBase64String("password")
할 경우 다음 .NET 때문에 행복하지 않다 그것은 IV를위한 6 바이트 배열을 얻고 있고 그것은 8 바이트를 원합니다.
우리가 잘못하고있는 아이디어가 있습니다.이 작업을 수행하기 위해 내 (VB.NET) 코드를 변경하는 것이 좋습니다. 아니면 두 가지 환경간에 더 잘 작동하는 다른 접근 방식을 사용하지 않습니까?
@Herb - 그냥 추측하지만 어쩌면 그들의 IV가 무시되고 있습니다. 나는 IV가 있거나없는 CF에서 같은 결과를 얻는다. 설명서에 "[IV] .. 알고리즘에 ECB가 아닌 피드백 모드가 있어야합니다." 그것은 IV가 다른 피드백 모드를 제공하지 않으면 사용되지 않는다고 제안하는 것 같습니다. – Leigh
나는 한 번 클라이언트에서 동일한 문제를 겪었습니다 (CF에 있었고 .NET에있었습니다). 우리는 결국 결국 AES를 포기하고 사용했고 그것은 우리를 위해 일했습니다. – ryber