Share via


Protect-CmsMessage

使用密碼編譯訊息語法格式來加密內容。

Syntax

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

Description

Cmdlet Protect-CmsMessage 會使用密碼編譯訊息語法 (CMS) 格式來加密內容。

CMS Cmdlet 支援使用 IETF 格式來加密和解密內容,如RFC5652所述

CMS 加密標準會使用公鑰密碼編譯,其中用來加密內容的密鑰(公鑰)和用來解密內容的金鑰(私鑰)是分開的。 您的公鑰可以廣泛共用,而且不是敏感數據。 如果有任何內容使用此公鑰加密,則只有您的私鑰才能解密。 如需詳細資訊,請參閱 公鑰密碼編譯

您必須先設定加密憑證,才能執行 Protect-CmsMessage Cmdlet。 若要在PowerShell中辨識,加密憑證需要唯一的外延密鑰使用方式 (EKU) 識別碼,才能將其識別為數據加密憑證(例如程式代碼簽署和加密郵件的識別符)。 如需適用於檔加密的憑證範例,請參閱本主題中的範例 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-ChildItemDocumentEncryptionCert 動態參數,只有在載入憑證提供者時才可使用。

參數

-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