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 訊息接收者,並以以下任一格式識別:

  • 真正的憑證(從憑證提供者取得)。
  • 包含憑證的檔案路徑。
  • 通往包含憑證目錄的路徑。
  • 憑證的拇指指紋(用來在憑證商店查看)。
  • 證書的主旨名稱(用來在證書商店裡查詢)。

參數屬性

類型:

CmsMessageRecipient[]

預設值: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。