首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Capicom与.Net System.Security.Cryptography不同的3 3DES标准?

Capicom与.Net System.Security.Cryptography不同的3 3DES标准?
EN

Stack Overflow用户
提问于 2011-06-13 11:28:11
回答 1查看 1.7K关注 0票数 1

我正在处理标准的3 3DES 128位,用于加密和解密字符串。它在两个不同的环境中实现:经典ASP (VB6)和.Net。

我认为3 3DES是标准的,但是我不能使它在这两者之间兼容(capicom和.Net)。谷歌一遍后,我意识到capicom有一些自己的定制魔法。

据我所知,3 3DES需要两个指定的128位(8字节)密钥(密码)和8字节的"IV"。所以,我找不到可以在capicom中指定"IV“的8个字节的地方,因此,我怀疑这是造成差异的原因。

.Net System.Security.Cryptography

代码语言:javascript
复制
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

VB6环境中的Capicom:

代码语言:javascript
复制
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)

希望你能帮我提供一些想法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-13 14:26:33

如果VB6 1不需要初始化向量,可能是因为它使用的是电子烹饪本模式(ECB),而不是.Net版本所使用的密码块链模式。如果将.Net版本切换到欧洲央行,则可能会对跨平台进行加密和解密。然而,CBC是一种更安全的加密方式,因此如何强制CAPICOM使用CBC并指定初始化向量是值得尝试的。

此外,您不应该硬编码初始化向量(或键,但我假设您这样做是为了测试),您应该在每次生成新键时生成一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6329806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档