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>]
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-ChildItem 的 DocumentEncryptionCert 動態參數,只有在載入憑證提供者時才可使用。
參數
-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
指定您要加密的內容路徑。 不同於Path,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 |