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