Protect-CmsMessage
透過密碼訊息語法格式加密內容。
語法
ByContent (預設值)
Protect-CmsMessage
[-To] <CmsMessageRecipient[]>
[-Content] <PSObject>
[[-OutFile] <String>]
[<CommonParameters>]
ByPath
Protect-CmsMessage
[-To] <CmsMessageRecipient[]>
[-Path] <String>
[[-OutFile] <String>]
[<CommonParameters>]
ByLiteralPath
Protect-CmsMessage
[-To] <CmsMessageRecipient[]>
[-LiteralPath] <String>
[[-OutFile] <String>]
[<CommonParameters>]
Description
指令 Protect-CmsMessage 小子透過加密訊息語法(CMS)格式加密內容。
CMS 指令小程式支援使用 IETF 格式進行內容的加密與解密,該格式由 RFC5652 文件說明。
CMS 加密標準使用公開金鑰密碼學,其中用於加密內容的金鑰(公鑰)與用於解密內容的金鑰(私鑰)是分開的。 你的公鑰可以被廣泛分享,且不是敏感資料。 如果任何內容都用這個公鑰加密,只有你的私鑰能解密它。 欲了解更多資訊,請參閱 公鑰密碼學。
在執行 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
範例二:加密電子郵件發送的訊息
$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
若要在憑證提供者中查看文件加密憑證,可以新增 DocumentEncryptionCert 的動態參數 Get-ChildItem,該參數僅在憑證提供者載入時可用。
參數
-Content
指定一個包含你想要加密內容的 PSObject 。 例如,你可以加密事件訊息的內容,然後使用包含該訊息的變數($Event在此範例中)作為 內容 參數的值: $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1。 你也可以使用 Get-Content cmdlet 取得檔案內容,例如Microsoft Word文件,並將內容儲存在變數中,作為 Content 參數的值。
參數屬性
| 類型: | PSObject |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ByContent
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | True |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-LiteralPath
指定你想要加密的內容路徑。 與 Path 不同, LiteralPath 的值是完全按照其型別使用。 不會將任何字元解譯為通配符。 如果路徑包含逸出字元,請以單引弧括住它。 單引號會告知PowerShell不要將任何字元解譯為逸出序列。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ByLiteralPath
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-OutFile
指定你想傳送加密內容的檔案的路徑和檔名。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | 2 |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Path
指定你想要加密的內容路徑。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
ByPath
| Position: | 1 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-To
指定一個或多個 CMS 訊息接收者,並以以下任一格式識別:
- 真正的憑證(從憑證提供者取得)。
- 包含憑證的檔案路徑。
- 通往包含憑證目錄的路徑。
- 憑證的拇指指紋(用來在憑證商店查看)。
- 證書的主旨名稱(用來在證書商店裡查詢)。
參數屬性
| 類型: | |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
CommonParameters
此 cmdlet 支援常見參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。