如何在PowerShell中调用Security.Cryptography.AesGcm类的Encrypt方法
问题原因
你的问题属于调用语法错误,不存在依赖库缺失的情况。AesGcm类的Encrypt是实例方法,不是静态方法,你直接对类本身([Security.Cryptography.AesGcm]是类型对象)调用该方法,自然会触发方法不存在的报错。
正确使用示例
AES-GCM加密需要提前准备合法密钥、nonce(随机数),先实例化AesGcm对象后再调用加密方法,参考代码如下:
# 生成32字节AES256密钥(也可传入符合长度要求的已有密钥,16/24/32字节分别对应AES128/192/256) $key = [Security.Cryptography.RandomNumberGenerator]::GetBytes(32) # 实例化AesGcm对象,传入密钥 $aesGcm = New-Object Security.Cryptography.AesGcm $key # 生成GCM标准推荐的12字节长度nonce,注意同一密钥不可重复使用nonce $nonce = [Security.Cryptography.RandomNumberGenerator]::GetBytes(12) # 待加密明文转字节数组 $plainBytes = [Text.Encoding]::UTF8.GetBytes("你要加密的内容") # 初始化和明文等长的数组接收密文 $cipherBytes = New-Object byte[] $plainBytes.Length # 初始化16字节数组接收校验标签 $tag = New-Object byte[] 16 # 调用实例的Encrypt方法完成加密 $aesGcm.Encrypt($nonce, $plainBytes, $cipherBytes, $tag) # 用完释放资源 $aesGcm.Dispose()
注意事项
- 解密时需要传入和加密阶段完全一致的密钥、nonce、tag,才能完成解密和完整性校验
- nonce、tag不需要保密,但必须和密文绑定存储,密钥需要单独妥善保管
- 同一密钥下重复使用nonce会直接导致密钥泄露,必须保证每个加密场景的nonce唯一
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

