Protect-CmsMessage
使用加密消息语法格式加密内容。
语法
Protect-CmsMessage
[-To] <CmsMessageRecipient[]>
[-Content] <PSObject>
[[-OutFile] <String>]
[<CommonParameters>]
Protect-CmsMessage
[-To] <CmsMessageRecipient[]>
[-Path] <String>
[[-OutFile] <String>]
[<CommonParameters>]
Protect-CmsMessage
[-To] <CmsMessageRecipient[]>
[-LiteralPath] <String>
[[-OutFile] <String>]
[<CommonParameters>]
说明
cmdlet Protect-CmsMessage
使用加密消息语法 (CMS) 格式来加密内容。
CMS cmdlet 支持使用 RFC5652 记录的 IETF 格式对内容进行加密和解密。
CMS 加密标准采用公钥加密系统,其中用来加密内容的密匙(公匙)和用来解密内容的密匙(私匙)是分离的。 公匙可以广泛共享,它不是敏感数据。 如果用此公匙加密了任何内容,只有你的私匙可以解密它。 有关详细信息,请参阅 Public-key cryptography(公钥加密)。
必须先设置加密证书,然后才能运行 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 参数使用证书中 Subject 行的值。
示例 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 参数值的变量中。
Type: | PSObject |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-LiteralPath
指定要加密的内容的路径。 不同于 Path,LiteralPath 的值严格按照所键入的形式使用。 不会将任何字符解释为通配符。 如果路径包括转义符,请将其括在单引号中。 单引号告知 PowerShell 不要将任何字符解释为转义序列。
Type: | String |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-OutFile
指定要将加密内容发送到的文件的路径和文件名。
Type: | String |
Position: | 2 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
指定要加密的内容的路径。
Type: | String |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-To
指定以下任何格式标识的一个或多个 CMS 邮件收件人:
- 实际证书(从证书提供程序检索到的)。
- 指向包含证书的文件的路径。
- 指向包含证书的目录的路径。
- 证书的指纹(用于在证书存储中查找)。
- 证书的使用者名称(用于在证书存储中查找)。
Type: | CmsMessageRecipient[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |