使用TripleDES.CreateEncryptor()报错:需对象引用访问非共享成员求解决
错误原因
TripleDES是抽象类,CreateEncryptor()是实例方法,不能直接通过类名TripleDES调用,必须先创建TripleDES的实例对象,再调用该方法。
修正后的代码
Imports System.Security.Cryptography Imports System.Text Public Function EncryptData(ByVal plaintext As String, ByVal key As Byte(), ByVal iv As Byte()) As String ' 将明文转换为Unicode字节数组 Dim plaintextBytes() As Byte = Encoding.Unicode.GetBytes(plaintext) ' 使用Using语句自动释放资源,避免内存泄漏 Using tripleDesInstance As TripleDES = TripleDES.Create() ' 设置加密所需的密钥和初始化向量 tripleDesInstance.Key = key tripleDesInstance.IV = iv Using ms As New System.IO.MemoryStream() Using encStream As New CryptoStream(ms, tripleDesInstance.CreateEncryptor(), CryptoStreamMode.Write) ' 写入明文字节数组进行加密 encStream.Write(plaintextBytes, 0, plaintextBytes.Length) encStream.FlushFinalBlock() ' 将加密后的字节数组转换为Base64字符串返回 Return Convert.ToBase64String(ms.ToArray()) End Using End Using End Using End Function
关键说明
- 密钥与IV的要求:TripleDES的密钥长度必须是16或24字节,IV长度固定为8字节。可以通过以下代码生成随机的密钥和IV(需妥善保存,解密时必须使用相同的值):
Using tripleDes As TripleDES = TripleDES.Create() Dim key As Byte() = tripleDes.Key ' 生成随机密钥 Dim iv As Byte() = tripleDes.IV ' 生成随机IV End Using - 资源管理:使用
Using语句确保TripleDES、MemoryStream、CryptoStream这些实现IDisposable的对象被自动释放,避免资源泄漏。 - 变量拼写修正:原代码中
plainttextBytes存在拼写错误(多了一个t),已修正为plaintextBytes。
内容的提问来源于stack exchange,提问作者Gerry
相关产品推荐
相关产品推荐

