Другой стандарт 3DES в Capicom VS .Net System.Security.Cryptography? - PullRequest
1 голос
/ 13 июня 2011

Я работаю над стандартом 3DES 128bit для шифрования и дешифрования строки. Это реализовано в двух разных средах; классический ASP (VB6) и .Net.

Я думаю, что 3DES является стандартным, однако я не могу сделать его совместимым между этими двумя (capicom и .Net). Однажды погуглив, я понял, что у capicom есть какая-то индивидуальная магия.

Насколько я понимаю, 3DES требует двух указанных 128 бит (8 байтов) ключа (пароля) и 8 байтов "IV" . Таким образом, я нигде не могу найти, что я могу указать 8 байтов "IV" в capicom, поэтому, я подозреваю, это вызывает разницу.


.Net System.Security.Cryptography

Dim m_des As New TripleDESCryptoServiceProvider

...

Private ReadOnly str_key As String = "MyPwd1234567890p"
Private ReadOnly iv() As Byte = {8, 7, 6, 5, 4, 3, 2, 1}
Private m_utf8 As New UTF8Encoding
Private m_key() As Byte
Private m_iv() As Byte

Public Sub New(ByVal key() As Byte, ByVal iv() As Byte)
        Me.m_key = key
        Me.m_iv = iv
End Sub

' VB.NET to convert a string to a byte array
Public Shared Function StrToByteArray(ByVal str As String) As Byte()
  Dim encoding As New System.Text.UTF8Encoding()
  Return encoding.GetBytes(str)
End Function

Public Function Encrypt(ByVal input() As Byte) As Byte()        
        Return Transform(input, m_des.CreateEncryptor(StrToByteArray(str_key), m_iv))
End Function

Capicom в среде VB6:

Dim DecryptData
Set DecryptData = CreateObject("CAPICOM.EncryptedData")

Dim sDAta
sData = "Hello World"

DecryptData.Algorithm.KeyLength = CAPICOM_ENCRYPTION_KEY_LENGTH_128_BITS
DecryptData.Algorithm.Name = CAPICOM_ENCRYPTION_ALGORITHM_3DES
DecryptData.SetSecret("MyPwd1234567890p")

result = DecryptData.Decrypt(sData)

Надеюсь, что вы можете помочь поделиться некоторыми идеями.

1 Ответ

1 голос
/ 13 июня 2011

Если VB6 один не требует Вектор инициализации, это, вероятно, потому, что он использует режим Электронная поваренная книга (ECB), а не Режим цепочки шифров (CBC), который. Чистая версия использует. Если вы переключите версию .Net на ECB, вы, вероятно, сможете шифровать и дешифровать кроссплатформенные. Однако CBC является более безопасным режимом шифрования, поэтому, возможно, стоит попытаться выяснить, как заставить CAPICOM использовать CBC и указать вектор инициализации.

Также вам не нужно жестко кодировать вектор инициализации (или ключ, но я предполагаю, что вы делаете это для тестирования), вы должны генерировать его каждый раз, когда генерируете новый ключ.

...