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>]

说明

Protect-CmsMessage cmdlet 使用加密消息语法 (CMS) 格式加密内容。

CMS cmdlet 支持使用 iETF 格式加密和解密内容,如 RFC5652所述。

CMS 加密标准使用公钥加密,其中用于加密内容的密钥(公钥)和用于解密内容的密钥(私钥)是分开的。 公钥可以广泛共享,并且不是敏感数据。 如果有任何内容使用此公钥进行加密,则只有私钥可以解密它。 有关详细信息,请参阅 公钥加密

必须先设置加密证书,然后才能运行 Protect-CmsMessage cmdlet。 若要在 PowerShell 中识别,加密证书需要唯一的扩展密钥用法(EKU) ID 来将其标识为数据加密证书(例如代码签名和加密邮件的 ID)。 有关可用于文档加密的证书的示例,请参阅本主题中的示例 1。

示例

示例 1:创建用于加密内容的证书

# 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 -new DocumentEncryption.inf DocumentEncryption.cer

必须先创建加密证书,然后才能运行 Protect-CmsMessage cmdlet。 使用以下文本,将“主题”行中的名称更改为名称、电子邮件或其他标识符,并将证书保存在文件中(如“DocumentEncryption.inf”),如以下示例所示。

示例 2:加密通过电子邮件发送的邮件

$Protected = "Hello World" | Protect-CmsMessage -To "*youralias@emailaddress.com*"

在以下示例中,通过将消息“Hello World”管道传递给 Protect-CmsMessage cmdlet 来加密消息,然后将加密的消息保存在变量中。 To 参数使用证书中使用者行的值。

示例 3:查看文档加密证书

PS C:\> cd Cert:\currentuser\my
Get-ChildItem -DocumentEncryptionCert

若要查看证书提供程序中的文档加密证书,可以添加 DocumentEncryptionCertget-ChildItem的动态参数,仅当加载证书提供程序时才可用。

参数

-Content

指定 PSObject,其中包含要加密的内容。 例如,可以加密事件消息的内容,然后使用包含消息的变量(在本示例中为$Event)作为 Content 参数的值:$event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1。 还可以使用 Get-Content cmdlet 获取文件(如 Microsoft Word 文档)的内容,并将内容保存在用作 Content 参数值的变量中。

类型:PSObject
Position:1
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-LiteralPath

指定要加密的内容的路径。 与 路径不同,LiteralPath 的值与类型化完全相同。 不会将任何字符解释为通配符。 如果路径包含转义字符,请将它括在单引号中。 单引号告知 PowerShell 不要将任何字符解释为转义序列。

类型:String
Position:1
默认值:None
必需:True
接受管道输入:False
接受通配符:False

-OutFile

指定要向其发送加密内容的文件的路径和文件名。

类型:String
Position:2
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Path

指定要加密的内容的路径。

类型:String
Position:1
默认值:None
必需:True
接受管道输入:False
接受通配符:False

-To

指定一个或多个 CMS 消息收件人,这些收件人使用以下任何格式进行标识:

  • 实际证书(从证书提供程序检索)。
  • 包含证书的文件的路径。
  • 包含证书的目录的路径。
  • 证书的指纹(用于在证书存储中查找)。
  • 证书的使用者名称(用于在证书存储中查找)。
类型:CmsMessageRecipient[]
Position:0
默认值:None
必需:True
接受管道输入:False
接受通配符:False