Protect-CmsMessage
使用加密消息语法格式加密内容。
语法
ByContent (默认值)
Protect-CmsMessage
[-To] <CmsMessageRecipient[]>
[-Content] <PSObject>
[[-OutFile] <String>]
[<CommonParameters>]
ByPath
Protect-CmsMessage
[-To] <CmsMessageRecipient[]>
[-Path] <String>
[[-OutFile] <String>]
[<CommonParameters>]
ByLiteralPath
Protect-CmsMessage
[-To] <CmsMessageRecipient[]>
[-LiteralPath] <String>
[[-OutFile] <String>]
[<CommonParameters>]
说明
该 Protect-CmsMessage cmdlet 使用加密消息语法 (CMS) 格式加密内容。
CMS cmdlet 支持使用 iETF 格式加密和解密内容,如 RFC5652所述。
CMS 加密标准使用公钥加密,其中用于加密内容的密钥(公钥)和用于解密内容的密钥(私钥)是分开的。 公钥可以广泛共享,并且不是敏感数据。 如果有任何内容使用此公钥进行加密,则只有私钥可以解密它。 更多信息请参见 公钥密码学。
在运行 Protect-CmsMessage cmdlet 之前,必须设置加密证书。
若要在 PowerShell 中识别,加密证书需要唯一的扩展密钥用法(EKU)ID 才能将其标识为数据加密证书(例如代码签名和加密邮件的 ID)。 有关可用于文档加密的证书的示例,请参阅本主题中的示例 1。
PowerShell 7.1 中添加了对 Linux 和 macOS 的支持。
示例
示例 1:创建用于加密内容的证书
在运行 Protect-CmsMessage cmdlet 之前,必须创建加密证书。 使用以下文本,将“主题”行中的名称更改为名称、电子邮件或其他标识符,并将证书保存在文件中(如 DocumentEncryption.inf以下示例所示)。
# Create .INF file for certreq
{[Version]
Signature = "$Windows NT$"
[Strings]
szOID_ENHANCED_KEY_USAGE = "2.5.29.37"
szOID_DOCUMENT_ENCRYPTION = "1.3.6.1.4.1.311.80.1"
[NewRequest]
Subject = "cn=youralias@emailaddress.com"
MachineKeySet = false
KeyLength = 2048
KeySpec = AT_KEYEXCHANGE
HashAlgorithm = Sha1
Exportable = true
RequestType = Cert
KeyUsage = "CERT_KEY_ENCIPHERMENT_KEY_USAGE | CERT_DATA_ENCIPHERMENT_KEY_USAGE"
ValidityPeriod = "Years"
ValidityPeriodUnits = "1000"
[Extensions]
%szOID_ENHANCED_KEY_USAGE% = "{text}%szOID_DOCUMENT_ENCRYPTION%"
} | Out-File -FilePath DocumentEncryption.inf
# After you have created your certificate file, run the following command to add
# the certificate file to the certificate store. Now you are ready to encrypt and
# decrypt content with the next two examples.
certreq.exe -new DocumentEncryption.inf DocumentEncryption.cer
示例 2:加密通过电子邮件发送的邮件
$Protected = "Hello World" | Protect-CmsMessage -To "*youralias@emailaddress.com*"
在以下示例中,通过将消息“Hello World”管道传递给 Protect-CmsMessage cmdlet,然后将加密的消息保存在变量中。
To 参数使用证书中使用者行的值。
示例 3:查看文档加密证书
PS C:\> cd Cert:\CurrentUser\My
PS Cert:\CurrentUser\My> Get-ChildItem -DocumentEncryptionCert
若要查看证书提供程序中的文档加密证书,只能在加载证书提供程序时添加 Get-ChildItem 的 DocumentEncryptionCert 动态参数。
参数
-Content
指定包含要加密的内容的 PSObject 。 例如,可以加密事件消息的内容,然后使用包含消息($Event在此示例中)的变量作为 Content 参数的值: $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1 还可以使用 Get-Content cmdlet 获取文件(如Microsoft Word文档)的内容,并将内容保存在用作 content 参数值的变量中。
参数属性
| 类型: | PSObject |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
ByContent
| Position: | 1 |
| 必需: | True |
| 来自管道的值: | True |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-LiteralPath
指定要加密的内容的路径。 与 Path 不同, LiteralPath 的值与类型化完全相同。 不会将任何字符解释为通配符。 如果路径包含转义字符,请将它括在单引号中。 单引号告知 PowerShell 不要将任何字符解释为转义序列。
参数属性
| 类型: | String |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
ByLiteralPath
| Position: | 1 |
| 必需: | True |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-OutFile
指定要向其发送加密内容的文件的路径和文件名。
参数属性
| 类型: | String |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | 2 |
| 必需: | False |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-Path
指定要加密的内容的路径。
参数属性
| 类型: | String |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
ByPath
| Position: | 1 |
| 必需: | True |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
-To
指定一个或多个 CMS 消息收件人,这些收件人使用以下任何格式进行标识:
- 实际证书(从证书提供程序检索)。
- 包含证书的文件的路径。
- 包含证书的目录的路径。
- 证书的指纹(用于在证书存储中查找)。
- 证书的使用者名称(用于在证书存储中查找)。
参数属性
| 类型: | |
| 默认值: | None |
| 支持通配符: | False |
| 不显示: | False |
参数集
(All)
| Position: | 0 |
| 必需: | True |
| 来自管道的值: | False |
| 来自管道的值(按属性名称): | False |
| 来自剩余参数的值: | False |
CommonParameters
此 cmdlet 支持通用参数:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 有关详细信息,请参阅 about_CommonParameters。