- 概要
- 暗号化
- データベース
- Java
- Python
- Web API
UiPath.Cryptography.Activities
対称暗号化と復号化、キー付きハッシュ、PGP 暗号化、復号化、署名、クリア署名、検証、およびキー生成のためのコード化されたワークフロー API。これらの API は、コード化されたオートメーションを設計する際に使用します。コード 化されたオートメーション と、API を使用してそれらのオートメーションを設計する方法について詳しくは、こちらをご覧ください。
- サービス アクセサ:
cryptography(ICryptographyService型) - 必要なパッケージ: 依存関係
project.json"UiPath.Cryptography.Activities": "*"。
自動インポートされる名前空間
このパッケージをインストールすると、コード化されたワークフローで以下の名前空間が自動的に利用可能になります。
System
System.IO
System.Text
UiPath.Cryptography
UiPath.Cryptography.Activities
UiPath.Cryptography.Activities.API
UiPath.Cryptography.Enums
System
System.IO
System.Text
UiPath.Cryptography
UiPath.Cryptography.Activities
UiPath.Cryptography.Activities.API
UiPath.Cryptography.Enums
サービスの概要
cryptography サービスでは、すべての操作がダイレクト メソッド呼び出しとして公開されます。開く接続、ハンドル、スコープはありません。ステートレスなシングルトンとして登録されるため、アクセサーはワークフロー全体で共有され、そのメソッドは同時に安全に呼び出すことができます。サービス アクセサーのメソッドを直接呼び出します。
var key = PasswordKey.FromPassword("mykey", Encoding.UTF8);
var ciphertext = cryptography.EncryptText("secret", EncryptionAlgorithm.AESGCM, SymmetricEncryptOptions.Classic(key));
var key = PasswordKey.FromPassword("mykey", Encoding.UTF8);
var ciphertext = cryptography.EncryptText("secret", EncryptionAlgorithm.AESGCM, SymmetricEncryptOptions.Classic(key));
バイト、テキスト、およびファイル フォーム
すべての論理演算では、次の 3 つの入力/出力フォームが公開されます。すでに持っているデータに一致するものを選択してください。
| フォーム | サフィックス | 入力→出力 | 使用すべきタイミング |
|---|---|---|---|
| バイト | (ベース) | byte[] → byte[] | バイナリデータまたは読み込み済みのデータ。 |
| テキスト | ...Text | string → string (Base64 または ASCII 装甲) | テキスト(HTTP、構成、環境)として到着するデータ。 |
| ファイル | ...File | ファイル パス → ファイル パス | ディスク上に存在するデータ。 |
キー素材
対称およびキー付きハッシュ操作は、キーマテリアルを2つの具体的な CryptoKey サブタイプのうちの1つとして採用します。選択したクラスによって、キーを使用できるワイヤ形式が決まり、型システムはコンパイル時にフォーマット ファクトリを介してそれを強制します。
PasswordKey
PBKDF2 で暗号キーに拡張されるパスワード素材。Classic、Owasp2026、および OpenSslEnc ワイヤ形式で使用します。
| 工場 | 目的 |
|---|---|
PasswordKey.FromPassword(string password, Encoding encoding) | stringとしてのパスワードまたはパスフレーズ。 |
PasswordKey.FromPassword(SecureString password, Encoding encoding) | シークレット ストアまたはユーザー入力から取得されます。 |
PasswordKey は、パスワードを SecureString として内部に格納し ( string ファクトリは入力文字を 1 つにコピーします)、各操作で暗号キーのバイトを Just-In-Time で具体化します。バイトは操作のスタックフレームにのみ存在し、 PasswordKey インスタンスに固定されることはありません。中間バッファーは、各実体化後にゼロになります。
PasswordKey は IDisposableです: Dispose() を呼び出すと保護されたバッファが熱心にゼロになり、その後の KeyBytes アクセスは ObjectDisposedExceptionをスローします。長期間有効なワークフローには破棄をお勧めします。
RawKey
アルゴリズムで必要とされる正確な長さのリテラル暗号キー (AES-256 の場合は 32 バイトなど)。Rawワイヤ形式で使用します。KDF は適用されません。RawKey is IDisposable: Dispose() を呼び出すと、保持されているキーバイトが所定の位置にゼロになります。
| 工場 | 目的 |
|---|---|
RawKey.FromBytes(byte[] keyBytes) | キーは既にバイトとして読み込まれています。 |
RawKey.FromHex(string hex) | 16 進数としてエンコードされたキーです。 |
RawKey.FromBase64(string base64) | Base64 としてエンコードされたキー。 |
キーの長さはファクトリによって検証されません。これは、暗号化または復号化メソッドを呼び出すときにチェックされ、選択したアルゴリズムの不正な長さは、有効なバイト長(AESの場合は16、24、または32など)のリスト ArgumentException スローされます。アルゴリズムに必要なキーサイズを正確に使用してキーを構築します。
キー付きハッシュ メソッドは、 CryptoKey を直接受け取り、ワイヤ形式の軸を持たないため、どちらのサブタイプも受け入れます。
対称オプション
SymmetricEncryptOptions と SymmetricDecryptOptions は、キー、ワイヤ形式、および形式固有の値 ( Rawの IV 、 Owasp2026 と OpenSslEncの KDF 反復)をバンドルします。フォーマットファクトリを使用して構築します。ファクトリのキー・パラメータ・タイプは、コンパイル時にキーの種類とワイヤ・フォーマットのペアを強制するため、 PasswordKey を Raw(...) に渡したり、 RawKey を Classic(...)に渡したりすることはできません。
| 工場 | 形式 | キーの種類 | 備考 |
|---|---|---|---|
SymmetricEncryptOptions.Classic(PasswordKey key, Encoding encoding = null) | Classic | PasswordKey | 既定値です。バック互換性のための固定ワイヤ形式(10,000反復でのPBKDF2-HMAC-SHA1)。 |
SymmetricEncryptOptions.Owasp2026(PasswordKey key, int kdfIterations = 1_300_000, Encoding encoding = null) | Owasp2026 | PasswordKey | クラシックと同じレイアウトで、PBKDF2-HMAC-SHA1 が OWASP の 2026 年の推奨反復回数で使用 |
SymmetricEncryptOptions.Raw(RawKey key, byte[] iv = null, Encoding encoding = null) | Raw | RawKey | 呼び出し元が提供するキーと IV (サード パーティの相互運用性のため)。 |
SymmetricEncryptOptions.OpenSslEnc(PasswordKey key, int kdfIterations = 600_000, Encoding encoding = null, AesKeySize aesKeySize = AesKeySize.Aes256) | OpenSslEnc | PasswordKey | openssl enc-互換性(PBKDF2-HMAC-SHA256Salted__ マジック)。 aesKeySize は、ピアの openssl enc -aes-N-cbcと一致するように AES-128、-192、または -256 を選択します。 |
SymmetricDecryptOptions ファクトリは同じ形状ですが、IV は暗号文ストリームから自動的に読み取られるため、復号側には IV がありません。オプションの encoding: パラメーターは、オプションでテキストエンコーディングを設定し(デフォルトは UTF-8)、 EncryptText と DecryptTextによってのみ参照されます。
構築されたオプションオブジェクトは読み取り専用ですが、内省可能です:CryptoOptionsゲッターKey、Format、KdfIterations、およびTextEncodingを公開します。SymmetricEncryptOptionsさらに、IVとAesKeySizeを公開します。そしてSymmetricDecryptOptionsAesKeySizeを公開します。
IVと塩の戦略
すべての対称暗号化方式は、デフォルトでは非決定論的であり、新しいランダムな8バイトのソルト(該当する場合)とIVまたはノンスがすべての呼び出しで生成され、暗号文ストリームに埋め込まれます。同じプレーンテキストを 2 回暗号化すると、常に異なる暗号テキストが生成され、一致する復号メソッドは、同じストリームからソルトと IV を自動的に再構築します。
- CBCファミリのアルゴリズム(
AES、Rijndael、DES、TripleDES、RC2)は、PKCS7パディング、CBCモード、およびランダムIVを使用します。 AESGCMは、ランダムな 96 ビットの nonce と 128 ビットの認証タグを備えた Authenticated Encryption with Associated Data (AEAD) です。新しいワークフローに適しています。ChaCha20Poly1305は、AES-GCM に代わる AEAD です。
Rawでは、 SymmetricEncryptOptions.Raw(key, iv)を使用して明示的な IV を指定できます。null (工場出荷時のデフォルト) を渡して、暗号で生成します。
PGP キーマテリアル
PGP メソッドは、厳密に型指定されたキーハンドルを取ります。一度作成すれば、複数の呼び出しで再利用できます。
| 工場 | 目的 |
|---|---|
PgpPublicKey.FromBytes(byte[] keyBytes) | メモリ内バイト(ASCIIアーマーまたはバイナリ)からの公開鍵。 |
PgpPublicKey.FromFilePath(string path) | .asc ファイルまたは .gpg ファイルから読み込まれた公開キー。 |
PgpPrivateKey.FromBytes(byte[] keyBytes, string passphrase) | 秘密キーとパスフレーズをバインド。 |
PgpPrivateKey.FromBytes(byte[] keyBytes, SecureString passphrase) | SecureStringパスフレーズの場合も同様です。 |
PgpPrivateKey.FromFilePath(string path, string passphrase) | ファイルの秘密キー。 |
PgpPrivateKey.FromFilePath(string path, SecureString passphrase) | SecureStringパスフレーズを含む、ファイルからの秘密キー。 |
各キー ハンドルは、次の 2 つのインスタンス メソッドも公開します。
| メンバー | 目的 |
|---|---|
byte[] ToBytes() | ロードされたキーバイトのコピーを返します:キーがアーマード入力から作成された場合はASCIIアーマード、バイナリからロードされた場合はバイナリ。PgpGenerateKeys によって返されるキーは ASCII アーマーです。 |
void Save(string filePath, bool overwrite = false) | キーをディスクに書き込みます。ファイルが存在し、overwriteが falseの場合にInvalidOperationExceptionをスローします。 |
PgpKeyPair ( PgpGenerateKeysによって返されるか、 new PgpKeyPair(publicKey, privateKey)で直接構築される) は、一致したパブリック/プライベート ペアを保持します。pair.PublicKey と pair.PrivateKeyを使用するか、var (pub, priv) = pair;を使用して分解します。ディスク上のファイルが必要なときに pair.PublicKey.Save(path) と pair.PrivateKey.Save(path) を永続化します。
暗号化メソッドに PgpPrivateKey を渡すと署名が暗示され、 PgpPublicKey を復号メソッドに渡すと署名の検証が暗黙的に行われます。個別の bool sign フラグや bool verifySignature フラグは使用されません。
PgpPrivateKey は、インスタンスの存続期間中、パスフレーズを SecureString として保存します。これは、基になる BouncyCastle ライブラリがプレーンな stringを必要とするため、各暗号化操作の期間中のみマネージド stringに具体化されます。PgpPrivateKey is IDisposable: Dispose() を呼び出すと、保護されたバッファが熱心にゼロになります。PgpPublicKey は秘密資料を保有しておらず、 IDisposableされていません。
アクティビティとの関係
コード化された API アクティビティと [暗号化 XAML (Cryptography XAML)] アクティビティ は同じ暗号化コアで実行されるため、以下のいずれかで完全に同等になります。
- アルゴリズムとキー付きハッシュアルゴリズム
- ワイヤ形式 (
Classic、Owasp2026、Raw、OpenSslEnc) - IV、KDF イテレーション、AES キー サイズ、およびエンコード オプション
- すべての PGP 操作
アクティビティで計算できるものはすべて、このサービスで計算できます。違いは、入力/出力の形状とキー入力フォームに関するものであり、機能に関するものではありません。
コード化された API は、以下のアクティビティ以上のことを行います。
| コード化された専用機能 | 詳細 |
|---|---|
| すべての操作のバイト入出力 | EncryptBytes / DecryptBytes、 KeyedHashBytes、 PgpEncryptBytes / PgpDecryptBytes、 PgpSignBytes / PgpClearSignBytes、 PgpVerifyBytes / PgpVerifyClearSignedBytes。byte[]フォームを持つアクティビティはありません。 |
Raw byte[] キー | RawKey.FromBytes(byte[]) 対称 Raw およびキー付きハッシュ用。アクティビティでは、生のキーを 16 進数または Base64 の文字列としてのみ指定できます。 |
| インメモリPGPキーマテリアル | PgpPublicKey.FromBytes また PgpPrivateKey.FromBytes ディスクにキーファイルなしで操作できます。アクティビティにはキー ファイルが必要です。 |
| テキストとバイトの署名/クリアサイン/検証 | PgpSignText / PgpClearSignText、 PgpVerifyText / PgpVerifyClearSignedText、およびそれらの Bytes 形式です。これらのアクティビティで公開されるのは、ファイルベースの署名、クリアサイン、検証のみです。 |
インメモリ PgpKeyPair | PgpGenerateKeys ファイル出力を強制せずに使用可能なキーペアを返します。 |
これらのアクティビティは、コード化された API では実行されない 2 つのことを行いますが、どちらも暗号化機能ではありません。
- UiPath リソース は、入力および出力として (
IResource/ILocalResource) を処理します。コード化された API は、プレーンなstringファイル パスとbyte[]を受け取ります。 - エラー発生時に続行 - 飲み込んで続行動作。コード化されたワークフローでは、すべてのメソッドが失敗するとスローされるため、代わりに通常の
try/catchを使用します。
[テキスト] アクティビティは、[キーのエンコード] と [プレーンテキスト エンコード] を 2 つのプロパティに分割しました。コード化された API では、パスワードのエンコードは PasswordKey.FromPassword(..., encoding) で設定され、プレーンテキストのエンコードは options encoding: パラメーターで設定されます。両方の軸は独立して制御可能です。
前のコード化された API から移行する
以前のリリースで導入されたコード化された API サーフェスは、このバージョンに統合されました。古いコール・シェイプ(Encodingパラメータとパス・ベースのPgpGenerateKeysを持つ個別のstring/SecureString/byte[]キー・オーバーロード)は、操作ごとに1つのオプション・ベースのシェイプに置き換えられるため、キーの種類とワイヤ形式のペアはコンパイル時に適用されます。
[Obsolete] shim はありません: 以前の API に対して記述されたコードは、このパッケージに対してコンパイルするために更新する必要があります。
| 前 | 後 |
|---|---|
EncryptBytes(input, algo, string key, Encoding enc) | EncryptBytes(input, algo, SymmetricEncryptOptions.Classic(PasswordKey.FromPassword(key, enc))) |
EncryptBytes(input, algo, SecureString key, Encoding enc) | EncryptBytes(input, algo, SymmetricEncryptOptions.Classic(PasswordKey.FromPassword(key, enc))) |
EncryptBytes(input, algo, byte[] keyBytes) | EncryptBytes(input, algo, SymmetricEncryptOptions.Raw(RawKey.FromBytes(keyBytes))) |
EncryptText(input, algo, key, enc) | EncryptText(input, algo, SymmetricEncryptOptions.Classic(PasswordKey.FromPassword(key, enc), enc)) |
EncryptFile(in, out, algo, key, enc, overwrite) | EncryptFile(in, out, algo, SymmetricEncryptOptions.Classic(PasswordKey.FromPassword(key, enc)), overwrite) |
DecryptBytes / DecryptText / DecryptFile | 同じ形状で、 SymmetricDecryptOptions.<Format>(...)。 |
KeyedHashBytes(input, algo, string key, Encoding enc) | KeyedHashBytes(input, algo, PasswordKey.FromPassword(key, enc)) |
KeyedHashBytes(input, algo, byte[] keyBytes) | KeyedHashBytes(input, algo, RawKey.FromBytes(keyBytes)) |
KeyedHashText(input, algo, string key, Encoding enc) | KeyedHashText(input, algo, PasswordKey.FromPassword(key, enc), enc) |
KeyedHashFile(inputPath, algo, string key, Encoding enc) | KeyedHashFile(inputPath, algo, PasswordKey.FromPassword(key, enc)) |
PgpGenerateKeys(publicKeyPath, privateKeyPath, userId, passphrase, keySize) | var pair = PgpGenerateKeys(userId, passphrase, keySize); pair.PublicKey.Save(publicKeyPath); pair.PrivateKey.Save(privateKeyPath); |
すべてのキーとオプションの種類が新しいため、古いオーバーロードを参照するコードは、別のオーバーロードをサイレントに取得するのではなく、コンパイルに失敗します。デフォルトのテキストエンコーディングは UTF-8 のままであるため、以前の UTF-8 デフォルトに依存していたコードは、オプションのリファクタリング以外の動作を変更する必要はありません。
対称暗号化
byte[] EncryptBytes(byte[] input, EncryptionAlgorithm algorithm, SymmetricEncryptOptions options)
任意のバイトを暗号化します。options パラメーターは、キーとワイヤの形式を保持します。選択したワイヤ形式に従って暗号文を返します。
string EncryptText(string input, EncryptionAlgorithm algorithm, SymmetricEncryptOptions options)
文字列を暗号化し、Base64 エンコードの暗号文として結果を返します。プレーンテキスト エンコードは options.TextEncodingから読み取られます。既定値は UTF-8 です。
void EncryptFile(string inputPath, string outputPath, EncryptionAlgorithm algorithm, SymmetricEncryptOptions options, bool overwrite = false)
ファイルを読み込んで暗号化し、結果を書き込みます。outputPathが存在し、overwriteがfalseの場合はInvalidOperationExceptionをスローします。
対称復号化
byte[] DecryptBytes(byte[] input, EncryptionAlgorithm algorithm, SymmetricDecryptOptions options)
EncryptBytesによって生成された暗号文を復号します。options.Format 、暗号化時に使用された形式と一致する必要があります。プレーンテキストのバイトを返します。
string DecryptText(string input, EncryptionAlgorithm algorithm, SymmetricDecryptOptions options)
EncryptText によって生成された Base64 エンコード暗号文を復号し、平文を返します。プレーンテキストエンコーディングは options.TextEncodingから読み取られ、暗号化時に使用されたエンコーディングと一致する必要があり、デフォルトはUTF-8です。
void DecryptFile(string inputPath, string outputPath, EncryptionAlgorithm algorithm, SymmetricDecryptOptions options, bool overwrite = false)
暗号化されたファイルを読み取り、プレーンテキストを書き込みます。outputPathが存在し、overwriteがfalseの場合はInvalidOperationExceptionをスローします。
キー付きハッシュ
キー付きハッシュ方式は、HMAC (または非 HMAC アルゴリズムの場合はプレーンハッシュ) を計算し、結果を大文字の 16 進文字列として返します。この操作は一方向であり、逆操作はありません。
string KeyedHashBytes(byte[] input, KeyedHashAlgorithms algorithm, CryptoKey key)
string KeyedHashText(string input, KeyedHashAlgorithms algorithm, CryptoKey key, Encoding encoding = null)
string KeyedHashFile(string inputPath, KeyedHashAlgorithms algorithm, CryptoKey key)
KeyedHashText のオプションの encoding パラメーターは、入力文字列をハッシュする前にバイトにトランスコードする方法を制御し、既定値は UTF-8 です。KeyedHashBytes は生のバイトで動作し、 KeyedHashFile はファイルの内容をバイト単位でハッシュするため、どちらもエンコード軸を持ちません。
PGP 暗号化
signerが提供された場合、暗号化されたペイロードもその秘密鍵で署名されます。
byte[] PgpEncryptBytes(byte[] input, PgpPublicKey recipient, PgpPrivateKey signer = null)
string PgpEncryptText(string input, PgpPublicKey recipient, PgpPrivateKey signer = null)
void PgpEncryptFile(string inputPath, string outputPath, PgpPublicKey recipient, PgpPrivateKey signer = null, bool overwrite = false)
PGP 復号化
verifierが指定されている場合、埋め込み署名は復号時に検証されます。
byte[] PgpDecryptBytes(byte[] input, PgpPrivateKey recipient, PgpPublicKey verifier = null)
string PgpDecryptText(string input, PgpPrivateKey recipient, PgpPublicKey verifier = null)
void PgpDecryptFile(string inputPath, string outputPath, PgpPrivateKey recipient, PgpPublicKey verifier = null, bool overwrite = false)
PGP 署名 (バイナリ署名)
バイナリ署名されたペイロードを生成します。PgpVerify*メソッドで検証します。
byte[] PgpSignBytes(byte[] input, PgpPrivateKey signer)
string PgpSignText(string input, PgpPrivateKey signer)
void PgpSignFile(string inputPath, string outputPath, PgpPrivateKey signer, bool overwrite = false)
PGP クリア署名
明確な署名では、元のコンテンツが人間が判読できる状態が維持され、署名が追加されます。PgpVerifyClearSigned*メソッドで検証します。
byte[] PgpClearSignBytes(byte[] input, PgpPrivateKey signer)
string PgpClearSignText(string input, PgpPrivateKey signer)
void PgpClearSignFile(string inputPath, string outputPath, PgpPrivateKey signer, bool overwrite = false)
PGP 検証
バイナリ署名
PgpSign* メソッド (または署名者とのPgpEncrypt*) によって生成されたペイロードを検証します。
| メソッド | 署名 |
|---|---|
| バイト | bool PgpVerifyBytes(byte[] input, PgpPublicKey verifier) |
| テキスト | bool PgpVerifyText(string input, PgpPublicKey verifier) |
| ファイル | bool PgpVerifyFile(string inputPath, PgpPublicKey verifier) |
署名が有効な場合は true を返し、それ以外の場合は false を返します。
明確な署名
PgpClearSign* メソッドによって生成されたペイロードを検証します。
| メソッド | 署名 |
|---|---|
| バイト | bool PgpVerifyClearSignedBytes(byte[] input, PgpPublicKey verifier) |
| テキスト | bool PgpVerifyClearSignedText(string input, PgpPublicKey verifier) |
| ファイル | bool PgpVerifyClearSignedFile(string inputPath, PgpPublicKey verifier) |
公開鍵の整形式性
PgpPublicKeyインスタンスが整形式のOpenPGP公開鍵として解析されることを確認します。これは、[ PGP 検証 ] アクティビティの [公開キーを検証 ] の検証の種類を反映しています。
bool PgpVerifyPublicKey(PgpPublicKey key)
キーが有効な場合に true を返します。
PGP キーペアの生成
メモリ内に OpenPGP RSA キーペアを生成し、両方の半分を一致した PgpKeyPairとして返します。各半分で Save(path) を呼び出して永続化します。
PgpKeyPair PgpGenerateKeys(string userId, string passphrase, RsaKeySize keySize = RsaKeySize.Rsa4096)
PgpKeyPair PgpGenerateKeys(string userId, SecureString passphrase, RsaKeySize keySize = RsaKeySize.Rsa4096)
パラメーター:
userId(string) - OpenPGP ユーザー ID。従来は、Alice Doe <[email protected]>などの RFC 2822 メールボックスでした。passphrase- 生成された秘密キーを保護するパスフレーズです。返されたPgpPrivateKeyにバインドされます。keySize(RsaKeySize) - RSA キーのサイズです。既定値は [Rsa4096です。Rsa3072とRsa2048は、レガシ システムとの相互運用性のために受け入れられます。
pair.PublicKey と pair.PrivateKeyを公開しているPgpKeyPairを返します。
列挙型のリファレンス
EncryptionAlgorithm
対称暗号化および復号メソッドで使用されます。
| 値 (Value) | 備考 |
|---|---|
AESGCM | 96ビットのノンスと128ビットの認証タグを持つAES-GCM。AEADです。新しいワークフローに適しています。 |
ChaCha20Poly1305 | ChaCha20-Poly1305 AEADです。非 FIPS。AES-GCM の代替手段。 |
AES | CBCモードのAES。 |
Rijndael | CBCモードのラインダール。時代遅れで弱い。避けてください。 |
DES | CBC モードの DES。時代遅れで弱い。避けてください。 |
TripleDES | CBC モードの 3DES。時代遅れで弱い。避けてください。 |
RC2 | CBCモードのRC2。時代遅れで弱い。避けてください。 |
PGP | 予約済み。代わりに、専用の PgpEncrypt* メソッドと PgpDecrypt* メソッドを使用してください。 |
SymmetricWireFormat
SymmetricEncryptOptions.Format と SymmetricDecryptOptions.Formatで使用します。
| 値 (Value) | 備考 |
|---|---|
Classic | UiPath のバイト安定レイアウトである PBKDF2-HMAC-SHA1 (反復回数 10,000 回)。既定値です。バック互換性のために凍結されました。 |
Owasp2026 | OWASP 推奨反復回数 (1,300,000) のクラシック レイアウト。呼び出し元は、 kdfIterationsを使用してこれをオーバーライドできます。 |
Raw | IV ‖ ciphertext [‖ tag].呼び出し元は、リテラルキー(およびオプションでIV)を提供します。サード パーティの相互運用性のため。 |
OpenSslEnc | Salted__ ‖ salt(8) ‖ ciphertext [‖ tag]、PBKDF2-HMAC-SHA256 はデフォルトで 600,000 回の反復で行われます。openssl enc -pbkdf2と互換性があります。 |
KeyedHashAlgorithms
キー付きハッシュ方式で使用されます。
| 値 (Value) | 入力 | 備考 |
|---|---|---|
HMACSHA256 | キー付きHMAC | MAC および整合性の検証に推奨されます。 |
HMACSHA384 | キー付きHMAC | |
HMACSHA512 | キー付きHMAC | |
SHA256 | キーなしハッシュ | キーは無視されます。プレーンSHAハッシュと同等です。 |
SHA384 | キーなしハッシュ | キーは無視されます。 |
SHA512 | キーなしハッシュ | キーは無視されます。 |
HMACSHA1 | キー付きHMAC | 廃止されました。SHA-1 は NIST によって非推奨です。SHA256 以上を優先します。 |
HMACMD5 | キー付きHMAC | 廃止されました。MD5 は壊れています。セキュリティが重視される用途では避けてください。 |
SHA1 | キーなしハッシュ | 廃止されました。衝突攻撃が実証されています。使用しないでください。 |
RsaKeySize
PgpGenerateKeysが使用 します。
| 値 (Value) | ビット |
|---|---|
Rsa2048 | 2048 |
Rsa3072 | 3072 |
Rsa4096 | 4096 (既定値) |
一般的なパターン
AES-GCM (クラシック、既定) を使用して文字列を暗号化および復号する
[Workflow]
public void Execute()
{
var key = PasswordKey.FromPassword("MySecretKey123!", Encoding.UTF8);
var ciphertext = cryptography.EncryptText("Sensitive data", EncryptionAlgorithm.AESGCM, SymmetricEncryptOptions.Classic(key));
Log($"Encrypted: {ciphertext}");
var plaintext = cryptography.DecryptText(ciphertext, EncryptionAlgorithm.AESGCM, SymmetricDecryptOptions.Classic(key));
Log($"Decrypted: {plaintext}");
}
[Workflow]
public void Execute()
{
var key = PasswordKey.FromPassword("MySecretKey123!", Encoding.UTF8);
var ciphertext = cryptography.EncryptText("Sensitive data", EncryptionAlgorithm.AESGCM, SymmetricEncryptOptions.Classic(key));
Log($"Encrypted: {ciphertext}");
var plaintext = cryptography.DecryptText(ciphertext, EncryptionAlgorithm.AESGCM, SymmetricDecryptOptions.Classic(key));
Log($"Decrypted: {plaintext}");
}
呼び出し元から提供された生のキーと IV を使用して暗号化する (サードパーティの相互運用性)
[Workflow]
public void Execute()
{
// 32 bytes for AES-256
byte[] rawKeyBytes = Convert.FromBase64String("your-base64-encoded-32-byte-key==");
byte[] iv = Convert.FromHexString("a3f1b2c4d5e6f70819a0b1c2d3e4f506");
var key = RawKey.FromBytes(rawKeyBytes);
byte[] cipher = cryptography.EncryptBytes(
Encoding.UTF8.GetBytes("payload"),
EncryptionAlgorithm.AESGCM,
SymmetricEncryptOptions.Raw(key, iv));
// Decrypt. The IV is read from the ciphertext stream prefix, so there is no need to pass it again.
byte[] plain = cryptography.DecryptBytes(
cipher,
EncryptionAlgorithm.AESGCM,
SymmetricDecryptOptions.Raw(key));
}
[Workflow]
public void Execute()
{
// 32 bytes for AES-256
byte[] rawKeyBytes = Convert.FromBase64String("your-base64-encoded-32-byte-key==");
byte[] iv = Convert.FromHexString("a3f1b2c4d5e6f70819a0b1c2d3e4f506");
var key = RawKey.FromBytes(rawKeyBytes);
byte[] cipher = cryptography.EncryptBytes(
Encoding.UTF8.GetBytes("payload"),
EncryptionAlgorithm.AESGCM,
SymmetricEncryptOptions.Raw(key, iv));
// Decrypt. The IV is read from the ciphertext stream prefix, so there is no need to pass it again.
byte[] plain = cryptography.DecryptBytes(
cipher,
EncryptionAlgorithm.AESGCM,
SymmetricDecryptOptions.Raw(key));
}
によって生成されたファイルを復号する openssl enc
[Workflow]
public void Execute()
{
// openssl enc -aes-256-cbc -pbkdf2 -iter 600000 -md sha256 -salt -k password -in plain.txt -out cipher.bin
var key = PasswordKey.FromPassword("password", Encoding.UTF8);
cryptography.DecryptFile(
inputPath: @"C:\Documents\cipher.bin",
outputPath: @"C:\Documents\plain.txt",
algorithm: EncryptionAlgorithm.AES,
options: SymmetricDecryptOptions.OpenSslEnc(key),
overwrite: true);
}
[Workflow]
public void Execute()
{
// openssl enc -aes-256-cbc -pbkdf2 -iter 600000 -md sha256 -salt -k password -in plain.txt -out cipher.bin
var key = PasswordKey.FromPassword("password", Encoding.UTF8);
cryptography.DecryptFile(
inputPath: @"C:\Documents\cipher.bin",
outputPath: @"C:\Documents\plain.txt",
algorithm: EncryptionAlgorithm.AES,
options: SymmetricDecryptOptions.OpenSslEnc(key),
overwrite: true);
}
より強力な KDF 反復回数 (Owasp2026) を使用する
[Workflow]
public void Execute()
{
var key = PasswordKey.FromPassword("MySecretKey", Encoding.UTF8);
// Owasp2026(key) defaults to kdfIterations = 1_300_000 (the OWASP 2026 recommendation).
var ciphertext = cryptography.EncryptBytes(
Encoding.UTF8.GetBytes("payload"),
EncryptionAlgorithm.AESGCM,
SymmetricEncryptOptions.Owasp2026(key));
// Decrypt must use the same iteration count. Owasp2026 does not store it in the wire format.
byte[] plain = cryptography.DecryptBytes(
ciphertext,
EncryptionAlgorithm.AESGCM,
SymmetricDecryptOptions.Owasp2026(key));
}
[Workflow]
public void Execute()
{
var key = PasswordKey.FromPassword("MySecretKey", Encoding.UTF8);
// Owasp2026(key) defaults to kdfIterations = 1_300_000 (the OWASP 2026 recommendation).
var ciphertext = cryptography.EncryptBytes(
Encoding.UTF8.GetBytes("payload"),
EncryptionAlgorithm.AESGCM,
SymmetricEncryptOptions.Owasp2026(key));
// Decrypt must use the same iteration count. Owasp2026 does not store it in the wire format.
byte[] plain = cryptography.DecryptBytes(
ciphertext,
EncryptionAlgorithm.AESGCM,
SymmetricDecryptOptions.Owasp2026(key));
}
データ整合性検証のためのHMAC-SHA256の計算
[Workflow]
public void Execute()
{
byte[] hmacKey = Convert.FromBase64String("your-base64-hmac-key==");
var key = RawKey.FromBytes(hmacKey);
// Keyed-hash methods take a CryptoKey directly. There is no options object, because there is no wire-format axis.
var digest = cryptography.KeyedHashText("payload to verify", KeyedHashAlgorithms.HMACSHA256, key);
Log($"HMAC-SHA256: {digest}");
}
[Workflow]
public void Execute()
{
byte[] hmacKey = Convert.FromBase64String("your-base64-hmac-key==");
var key = RawKey.FromBytes(hmacKey);
// Keyed-hash methods take a CryptoKey directly. There is no options object, because there is no wire-format axis.
var digest = cryptography.KeyedHashText("payload to verify", KeyedHashAlgorithms.HMACSHA256, key);
Log($"HMAC-SHA256: {digest}");
}
PGP の暗号化と署名、復号と検証
[Workflow]
public void Execute()
{
var recipientPublic = PgpPublicKey.FromFilePath(@"C:\Keys\recipient_public.asc");
var senderPrivate = PgpPrivateKey.FromFilePath(@"C:\Keys\sender_private.asc", "senderPassphrase");
// Passing a signer to PgpEncrypt* implies sign-and-encrypt.
byte[] encrypted = cryptography.PgpEncryptBytes(
Encoding.UTF8.GetBytes("Signed and encrypted message"),
recipientPublic,
signer: senderPrivate);
var recipientPrivate = PgpPrivateKey.FromFilePath(@"C:\Keys\recipient_private.asc", "recipientPassphrase");
var senderPublic = PgpPublicKey.FromFilePath(@"C:\Keys\sender_public.asc");
// Passing a verifier to PgpDecrypt* implies verify-while-decrypting.
byte[] decrypted = cryptography.PgpDecryptBytes(
encrypted,
recipientPrivate,
verifier: senderPublic);
Log(Encoding.UTF8.GetString(decrypted));
}
[Workflow]
public void Execute()
{
var recipientPublic = PgpPublicKey.FromFilePath(@"C:\Keys\recipient_public.asc");
var senderPrivate = PgpPrivateKey.FromFilePath(@"C:\Keys\sender_private.asc", "senderPassphrase");
// Passing a signer to PgpEncrypt* implies sign-and-encrypt.
byte[] encrypted = cryptography.PgpEncryptBytes(
Encoding.UTF8.GetBytes("Signed and encrypted message"),
recipientPublic,
signer: senderPrivate);
var recipientPrivate = PgpPrivateKey.FromFilePath(@"C:\Keys\recipient_private.asc", "recipientPassphrase");
var senderPublic = PgpPublicKey.FromFilePath(@"C:\Keys\sender_public.asc");
// Passing a verifier to PgpDecrypt* implies verify-while-decrypting.
byte[] decrypted = cryptography.PgpDecryptBytes(
encrypted,
recipientPrivate,
verifier: senderPublic);
Log(Encoding.UTF8.GetString(decrypted));
}
新しい PGP キーペアを生成する
[Workflow]
public void Execute()
{
PgpKeyPair pair = cryptography.PgpGenerateKeys(
userId: "Alice <[email protected]>",
passphrase: "StrongPassphrase!",
keySize: RsaKeySize.Rsa4096);
pair.PublicKey.Save(@"C:\Keys\my_public.asc");
pair.PrivateKey.Save(@"C:\Keys\my_private.asc");
Log("Key pair generated.");
}
[Workflow]
public void Execute()
{
PgpKeyPair pair = cryptography.PgpGenerateKeys(
userId: "Alice <[email protected]>",
passphrase: "StrongPassphrase!",
keySize: RsaKeySize.Rsa4096);
pair.PublicKey.Save(@"C:\Keys\my_public.asc");
pair.PrivateKey.Save(@"C:\Keys\my_private.asc");
Log("Key pair generated.");
}
受信公開鍵を保存する前に検証する
[Workflow]
public void Execute()
{
// Armored public key arriving as text from an HTTP response or config.
string armoredPublicKey = LoadFromInbox();
var candidate = PgpPublicKey.FromBytes(Encoding.UTF8.GetBytes(armoredPublicKey));
if (!cryptography.PgpVerifyPublicKey(candidate))
{
throw new InvalidOperationException("Supplied content is not a valid OpenPGP public key.");
}
candidate.Save(@"C:\Keys\trusted_public.asc");
}
[Workflow]
public void Execute()
{
// Armored public key arriving as text from an HTTP response or config.
string armoredPublicKey = LoadFromInbox();
var candidate = PgpPublicKey.FromBytes(Encoding.UTF8.GetBytes(armoredPublicKey));
if (!cryptography.PgpVerifyPublicKey(candidate))
{
throw new InvalidOperationException("Supplied content is not a valid OpenPGP public key.");
}
candidate.Save(@"C:\Keys\trusted_public.asc");
}
- 自動インポートされる名前空間
- サービスの概要
- バイト、テキスト、およびファイル フォーム
- キー素材
PasswordKeyRawKey- 対称オプション
- IVと塩の戦略
- PGP キーマテリアル
- アクティビティとの関係
- 前のコード化された API から移行する
- 対称暗号化
byte[] EncryptBytes(byte[] input, EncryptionAlgorithm algorithm, SymmetricEncryptOptions options)string EncryptText(string input, EncryptionAlgorithm algorithm, SymmetricEncryptOptions options)void EncryptFile(string inputPath, string outputPath, EncryptionAlgorithm algorithm, SymmetricEncryptOptions options, bool overwrite = false)- 対称復号化
byte[] DecryptBytes(byte[] input, EncryptionAlgorithm algorithm, SymmetricDecryptOptions options)string DecryptText(string input, EncryptionAlgorithm algorithm, SymmetricDecryptOptions options)void DecryptFile(string inputPath, string outputPath, EncryptionAlgorithm algorithm, SymmetricDecryptOptions options, bool overwrite = false)- キー付きハッシュ
string KeyedHashBytes(byte[] input, KeyedHashAlgorithms algorithm, CryptoKey key)string KeyedHashText(string input, KeyedHashAlgorithms algorithm, CryptoKey key, Encoding encoding = null)string KeyedHashFile(string inputPath, KeyedHashAlgorithms algorithm, CryptoKey key)- PGP 暗号化
byte[] PgpEncryptBytes(byte[] input, PgpPublicKey recipient, PgpPrivateKey signer = null)string PgpEncryptText(string input, PgpPublicKey recipient, PgpPrivateKey signer = null)void PgpEncryptFile(string inputPath, string outputPath, PgpPublicKey recipient, PgpPrivateKey signer = null, bool overwrite = false)- PGP 復号化
byte[] PgpDecryptBytes(byte[] input, PgpPrivateKey recipient, PgpPublicKey verifier = null)string PgpDecryptText(string input, PgpPrivateKey recipient, PgpPublicKey verifier = null)void PgpDecryptFile(string inputPath, string outputPath, PgpPrivateKey recipient, PgpPublicKey verifier = null, bool overwrite = false)- PGP 署名 (バイナリ署名)
byte[] PgpSignBytes(byte[] input, PgpPrivateKey signer)string PgpSignText(string input, PgpPrivateKey signer)void PgpSignFile(string inputPath, string outputPath, PgpPrivateKey signer, bool overwrite = false)- PGP クリア署名
byte[] PgpClearSignBytes(byte[] input, PgpPrivateKey signer)string PgpClearSignText(string input, PgpPrivateKey signer)void PgpClearSignFile(string inputPath, string outputPath, PgpPrivateKey signer, bool overwrite = false)- PGP 検証
- バイナリ署名
- 明確な署名
- 公開鍵の整形式性
- PGP キーペアの生成
PgpKeyPair PgpGenerateKeys(string userId, string passphrase, RsaKeySize keySize = RsaKeySize.Rsa4096)PgpKeyPair PgpGenerateKeys(string userId, SecureString passphrase, RsaKeySize keySize = RsaKeySize.Rsa4096)- 列挙型のリファレンス
EncryptionAlgorithmSymmetricWireFormatKeyedHashAlgorithmsRsaKeySize- 一般的なパターン
- AES-GCM (クラシック、既定) を使用して文字列を暗号化および復号する
- 呼び出し元から提供された生のキーと IV を使用して暗号化する (サードパーティの相互運用性)
- によって生成されたファイルを復号する
openssl enc - より強力な KDF 反復回数 (
Owasp2026) を使用する - データ整合性検証のためのHMAC-SHA256の計算
- PGP の暗号化と署名、復号と検証
- 新しい PGP キーペアを生成する
- 受信公開鍵を保存する前に検証する