You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TripleDES.CreateEncryptor()报错:需对象引用访问非共享成员求解决

问题解决:TripleDES加密函数报错“Reference to a non-shared member requires an object reference”

错误原因

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:31:35