共用方式為


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

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

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

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

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

指定您要加密的內容路徑。 不同於 PathLiteralPath 的值會與輸入時完全相同。 不會將任何字元解譯為通配符。 如果路徑包含逸出字元,請以單引弧括住它。 單引號會告知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