Crypto クラス
名前空間
使用方法
Crypto クラスのメソッドは、Lightning プラットフォームのコンテンツのセキュリティを確保したり、Google、Amazon WebServices (AWS) などの外部サービスと統合するために使用できます。
暗号化および復号化の例外
- decrypt
- encrypt
- decryptWithManagedIV
- encryptWithManagedIV
| 例外 | メッセージ | 説明 |
|---|---|---|
| InvalidParameterValue | 暗号化データの初期化ベクトルは解析できません。 | 管理初期化ベクトルを使用している場合で、暗号解読テキストが 16 バイト未満の場合に発生します。 |
| InvalidParameterValue | 無効なアルゴリズム algoName。AES128、AES192、AES256、AES384、または AES512 である必要があります。 | アルゴリズム名が有効な値の 1 つでない場合に発生します。 |
| InvalidParameterValue | 無効な非公開鍵。size バイトである必要があります。 | 非公開鍵のサイズが指定のアルゴリズムに一致しない場合に発生します。 |
| InvalidParameterValue | 無効な初期化ベクトル。16 バイトである必要があります。 | 初期化ベクトルが 16 バイトでない場合に発生します。 |
| InvalidParameterValue | 無効なデータ。入力データは size バイトです。1048576 バイトの制限を超えています。 | データが 1 MB を超える場合に発生します。復号化の場合、初期化ベクトルヘッダーでは 1048608 バイトが許容されます。さらに、ブロックサイズに合わせて暗号にパディングを追加できます。 |
| NullPointerException | 引数は null (空白) にできません。 | 必要なメソッドの引数の 1 つが null である場合に発生します。 |
| SecurityException | 所定の最終ブロックが適切にパディングされていません。 | 暗号化または復号化でデータが適切にブロック整列されていないか、同様の問題が発生している場合に発生します。 |
| SecurityException | さまざまなメッセージ | 暗号化か復号化時に問題が発生している場合に発生します。 |
Crypto のメソッド
Crypto のメソッドは次のとおりです。すべてのメソッドが静的です。
decrypt(algorithmName, privateKey, initializationVector, cipherText)
署名
public static Blob decrypt(String algorithmName, Blob privateKey, Blob initializationVector, Blob cipherText)
戻り値
型: Blob
使用方法
- AES128
- AES192
- AES256
privateKey の長さは指定のアルゴリズム (128 ビット、192 ビット、または 256 ビット) に一致する必要があります。長さは、それぞれ、16 バイト、24 バイト、32 バイトです。サードパーティアプリケーションを使用するか、generateAesKey メソッドを使用して、自分用にこの鍵を生成します。
例
1Blob exampleIv = Blob.valueOf('Example of IV123');
2Blob key = Crypto.generateAesKey(128);
3Blob data = Blob.valueOf('Data to be encrypted');
4Blob encrypted = Crypto.encrypt('AES128', key, exampleIv, data);
5
6Blob decrypted = Crypto.decrypt('AES128', key, exampleIv, encrypted);
7String decryptedString = decrypted.toString();
8System.assertEquals('Data to be encrypted', decryptedString);decryptWithManagedIV(algorithmName, privateKey, IVAndCipherText)
署名
public static Blob decryptWithManagedIV(String algorithmName, Blob privateKey, Blob IVAndCipherText)
パラメータ
戻り値
型: Blob
使用方法
- AES128
- AES192
- AES256
privateKey の長さは指定のアルゴリズム (128 ビット、192 ビット、または 256 ビット) に一致する必要があります。長さは、それぞれ、16 バイト、24 バイト、32 バイトです。サードパーティアプリケーションを使用するか、generateAesKey メソッドを使用して、自分用にこの鍵を生成します。
例
1Blob key = Crypto.generateAesKey(128);
2Blob data = Blob.valueOf('Data to be encrypted');
3Blob encrypted = Crypto.encryptWithManagedIV('AES128', key, data);
4
5Blob decrypted = Crypto.decryptWithManagedIV('AES128', key, encrypted);
6String decryptedString = decrypted.toString();
7System.assertEquals('Data to be encrypted', decryptedString);encrypt(algorithmName, privateKey, initializationVector, clearText)
署名
public static Blob encrypt(String algorithmName, Blob privateKey, Blob initializationVector, Blob clearText)
戻り値
型: Blob
使用方法
初期化ベクトルは 128 ビット (16 バイト) である必要があります。サードパーティアプリケーションまたは decrypt メソッドのいずれかを使用して、このメソッドにより暗号化された blob を復号化します。Salesforce で初期化ベクトルが生成されるようにする場合は、encryptWithManagedIV メソッドを使用します。暗号化 Blob の最初の 128 ビット (16 バイト) として格納されます。
- AES128
- AES192
- AES256
privateKey の長さは指定のアルゴリズム (128 ビット、192 ビット、または 256 ビット) に一致する必要があります。長さは、それぞれ、16 バイト、24 バイト、32 バイトです。サードパーティアプリケーションを使用するか、generateAesKey メソッドを使用して、自分用にこの鍵を生成します。
例
1Blob exampleIv = Blob.valueOf('Example of IV123');
2Blob key = Crypto.generateAesKey(128);
3Blob data = Blob.valueOf('Data to be encrypted');
4Blob encrypted = Crypto.encrypt('AES128', key, exampleIv, data);
5
6Blob decrypted = Crypto.decrypt('AES128', key, exampleIv, encrypted);
7String decryptedString = decrypted.toString();
8System.assertEquals('Data to be encrypted', decryptedString);encryptWithManagedIV(algorithmName, privateKey, clearText)
署名
public static Blob encryptWithManagedIV(String algorithmName, Blob privateKey, Blob clearText)
戻り値
型: Blob
使用方法
初期化ベクトルは、暗号化 Blob の最初の 128 ビット (16 バイト) として格納されます。サードパーティアプリケーションまたは decryptWithManagedIV メソッドのいずれかを使用して、このメソッドにより暗号化された blob を復号化します。独自の初期化ベクトルを生成する場合は、encrypt メソッドを使用します。
- AES128
- AES192
- AES256
privateKey の長さは指定のアルゴリズム (128 ビット、192 ビット、または 256 ビット) に一致する必要があります。長さは、それぞれ、16 バイト、24 バイト、32 バイトです。サードパーティアプリケーションを使用するか、generateAesKey メソッドを使用して、自分用にこの鍵を生成します。
例
1Blob key = Crypto.generateAesKey(128);
2Blob data = Blob.valueOf('Data to be encrypted');
3Blob encrypted = Crypto.encryptWithManagedIV('AES128', key, data);
4
5Blob decrypted = Crypto.decryptWithManagedIV('AES128', key, encrypted);
6String decryptedString = decrypted.toString();
7System.assertEquals('Data to be encrypted', decryptedString);generateDigest(algorithmName, input)
署名
public static Blob generateDigest(String algorithmName, Blob input)
パラメータ
戻り値
型: Blob
例
1Blob targetBlob = Blob.valueOf('ExampleMD5String');
2Blob hash = Crypto.generateDigest('MD5', targetBlob);generateMac(algorithmName, input, privateKey)
署名
public static Blob generateMac(String algorithmName, Blob input, Blob privateKey)
パラメータ
戻り値
型: Blob
例
1String salt = String.valueOf(Crypto.getRandomInteger());
2String key = 'key';
3Blob data = crypto.generateMac('HmacSHA256',
4Blob.valueOf(salt), Blob.valueOf(key));getRandomInteger()
署名
public static Integer getRandomInteger()
戻り値
型: Integer
例
1Integer randomInt = Crypto.getRandomInteger();getRandomLong()
署名
public static Long getRandomLong()
戻り値
型: Long
例
1Long randomLong = Crypto.getRandomLong();sign(algorithmName, input, privateKey)
署名
public static Blob sign(String algorithmName, Blob input, Blob privateKey)
パラメータ
- algorithmName
- 型: String
- アルゴリズム名。algorithmName に有効な値は、RSA、RSA-SHA1、RSA-SHA256、RSA-SHA384、RSA-SHA512、ECDSA-SHA256、ECDSA-SHA384、ECDSA-SHA512 です。
RSA-SHA1 は、SHA1 ハッシュの RSA 署名 (非対称鍵のペアを使用) です。
RSA-SHA256 は、SHA256 ハッシュの RSA 署名です。
RSA-SHA384 は、SHA384 ハッシュの RSA 署名です。
RSA-SHA512 は、SHA512 ハッシュの RSA 署名です。
RSA は、RSA-SHA1 と同じです。
ECDSA-SHA256 は、SHA256 ハッシュの ECDSA 署名です。
ECDSA-SHA384 は、SHA384 ハッシュの ECDSA 署名です。
ECDSA-SHA512 は、SHA512 ハッシュの ECDSA 署名です。
- input
- 型: Blob
- 署名するデータ。
- privateKey
- 型: Blob
- privateKey の値は EncodingUtilbase64Decode メソッドを使用して復号化される必要があり、RSA の PKCS #8 (1.2) Private-Key Information Syntax Standard 形式でなければなりません。値は 4 KB を超えることはできません。
戻り値
型: Blob
例
次のスニペットでは、sign メソッドをコールする方法を示します。
1String algorithmName = 'RSA';
2String key = '';
3Blob privateKey = EncodingUtil.base64Decode(key);
4Blob input = Blob.valueOf('12345qwerty');
5Crypto.sign(algorithmName, input, privateKey);signWithCertificate(algorithmName, input, certDevName)
署名
public static Blob signWithCertificate(String algorithmName, Blob input, String certDevName)
パラメータ
- algorithmName
- 型: String
- アルゴリズム名。algorithmName の有効な値は RSA、RSA-SHA1、RSA-SHA256、RSA-SHA384、RSA-SHA512、ECDSA-SHA256、ECDSA-SHA384、および ECDSA-SHA512 です。
RSA-SHA1 は、SHA1 ハッシュの RSA 署名 (非対称鍵のペアを使用) です。
RSA-SHA256 は、SHA256 ハッシュの RSA 署名です。
RSA-SHA384 は、SHA384 ハッシュの RSA 署名です。
RSA-SHA512 は、SHA512 ハッシュの RSA 署名です。
RSA は、RSA-SHA1 と同じです。
ECDSA-SHA256 は、SHA256 ハッシュの ECDSA 署名です。
ECDSA-SHA384 は、SHA384 ハッシュの ECDSA 署名です。
ECDSA-SHA512 は、SHA512 ハッシュの ECDSA 署名です。
- input
- 型: Blob
- 署名するデータ。
- certDevName
- 型: String
- Salesforce 組織の [証明書と鍵の管理] ページで、署名に使用するために保存された証明書の一意の名前。
[証明書と鍵の管理] ページにアクセスするには、[設定] から、[クイック検索] ボックスに「証明書と鍵の管理」と入力し、[証明書と鍵の管理] を選択します。
戻り値
型: Blob
例
次のスニペットは、data で参照されるコンテンツに署名するメソッドの例です。
1Blob data = Blob.valueOf('12345qwerty');
2System.Crypto.signWithCertificate('RSA-SHA512', data, 'signingCert'); signXML(algorithmName, node, idAttributeName, certDevName)
署名
public Void signXML(String algorithmName, Dom.XmlNode node, String idAttributeName, String certDevName)
パラメータ
- algorithmName
- 型: String
- RSA 暗号化アルゴリズム名。有効な名前は、RSA、RSA-SHA1、RSA-SHA256、RSA-SHA384、RSA-SHA512、ECDSA-SHA256、ECDSA-SHA384、ECDSA-SHA512 です。
RSA-SHA1 は、SHA1 ハッシュの RSA 署名 (非対称鍵のペアを使用) です。
RSA-SHA256 は、SHA256 ハッシュの RSA 署名です。
RSA-SHA384 は、SHA384 ハッシュの RSA 署名です。
RSA-SHA512 は、SHA512 ハッシュの RSA 署名です。
RSA は、RSA-SHA1 と同じです。
ECDSA-SHA256 は、SHA256 ハッシュの ECDSA 署名です。
ECDSA-SHA384 は、SHA384 ハッシュの ECDSA 署名です。
ECDSA-SHA512 は、SHA512 ハッシュの ECDSA 署名です。
- node
- 型: Dom.XmlNode
- 署名を行い、その署名を挿入する XML ノード。
- idAttributeName
- 型: String
- 参照 ID として使用するノード (XmlNode) の属性の完全名 (名前空間を含む)。null の場合、このメソッドではノードの ID 属性が使用されます。ID 属性が存在しない場合、Salesforce で新しい ID が生成され、ノードに追加されます。
- certDevName
- 型: String
- Salesforce 組織の [証明書と鍵の管理] ページで、署名に使用するために保存された証明書の一意の名前。
[証明書と鍵の管理] ページにアクセスするには、[設定] から、[クイック検索] ボックスに「証明書と鍵の管理」と入力し、[証明書と鍵の管理] を選択します。
戻り値
型: void
例
次に、宣言と初期化の例を示します。
1Dom.Document doc = new dom.Document();
2doc.load(...);
3System.Crypto.signXml('RSA-SHA512', doc.getRootElement(), null, 'signingCert');
4return doc.toXmlString(); signXML(algorithmName, node, idAttributeName, certDevName, refChild)
署名
public static void signXml(String algorithmName, Dom.XmlNode node, String idAttributeName, String certDevName, Dom.XmlNode refChild)
パラメータ
- algorithmName
- 型: String
- RSA 暗号化アルゴリズム名。有効な名前は、RSA、RSA-SHA1、RSA-SHA256、RSA-SHA384、RSA-SHA512、ECDSA-SHA256、ECDSA-SHA384、ECDSA-SHA512 です。
RSA-SHA1 は、SHA1 ハッシュの RSA 署名 (非対称鍵のペアを使用) です。
RSA-SHA256 は、SHA256 ハッシュの RSA 署名です。
RSA-SHA384 は、SHA384 ハッシュの RSA 署名です。
RSA-SHA512 は、SHA512 ハッシュの RSA 署名です。
RSA は、RSA-SHA1 と同じです。
ECDSA-SHA256 は、SHA256 ハッシュの ECDSA 署名です。
ECDSA-SHA384 は、SHA384 ハッシュの ECDSA 署名です。
ECDSA-SHA512 は、SHA512 ハッシュの ECDSA 署名です。
- node
- 型: Dom.XmlNode
- 署名を行い、その署名を挿入する XML ノード。
- idAttributeName
- 型: String
- 参照 ID として使用するノード (XmlNode) の属性の完全名 (名前空間を含む)。null の場合、このメソッドではノードの ID 属性が使用されます。ID 属性が存在しない場合、Salesforce で新しい ID が生成され、ノードに追加されます。
- certDevName
- 型: String
- Salesforce 組織の [証明書と鍵の管理] ページで、署名に使用するために保存された証明書の一意の名前。
[証明書と鍵の管理] ページにアクセスするには、[設定] から、[クイック検索] ボックスに「証明書と鍵の管理」と入力し、[証明書と鍵の管理] を選択します。
- refChild
- Dom.XmlNode
- その前に署名が挿入される XML ノード。refChild が null の場合、署名は最後に追加されます。
戻り値
型: Void
verify(String algorithmName, Blob data, Blob signature, Blob publicKey)
署名
public static Blob verify(String algorithmName, Blob data, Blob signature, Blob publicKey)
パラメータ
- algorithmName
- 型: String
- アルゴリズム名。algorithmName の有効な値は RSA、RSA-SHA1、RSA-SHA256、RSA-SHA384、RSA-SHA512、ECDSA-SHA256、ECDSA-SHA384、および ECDSA-SHA512 です。
RSA-SHA1 は、SHA1 ハッシュの RSA 署名 (非対称鍵のペアを使用) です。
RSA-SHA256 は、SHA256 ハッシュの RSA 署名です。
RSA-SHA384 は、SHA384 ハッシュの RSA 署名です。
RSA-SHA512 は、SHA512 ハッシュの RSA 署名です。
RSA は、RSA-SHA1 と同じです。
ECDSA-SHA256 は、SHA256 ハッシュの ECDSA 署名です。
ECDSA-SHA384 は、SHA384 ハッシュの ECDSA 署名です。
ECDSA-SHA512 は、SHA512 ハッシュの ECDSA 署名です。
- data
- 型: Blob
- 署名するデータ。
- signature
- 型:
- Blob
- RSA 署名。
- publicKey
- 型: Blob
- publicKey の値は EncodingUtilbase64Decode メソッドを使用して復号化される必要があり、X.509 標準の形式でなければなりません。
戻り値
型: Blob
例
1String algorithmName = 'RSA';
2String privateKey = '';
3String publicKey = '';
4Blob privateKey = EncodingUtil.base64Decode(privateKey);
5Blob publicKey = EncodingUtil.base64Decode(publicKey);
6Blob input = Blob.valueOf('12345qwerty');
7Blob signature = Crypto.sign(algorithmName, input, privateKey);
8Boolean verified = Crypto.verify(algorithmName, input, signature, publicKey);verify(String algorithmName, Blob data, Blob signature, String certDevName)
署名
public static Blob verify(String algorithmName, Blob data, Blob signature, String certDevName)
パラメータ
- algorithmName
- 型: String
- アルゴリズム名。algorithmName の有効な値は RSA、RSA-SHA1、RSA-SHA256、RSA-SHA384、RSA-SHA512、ECDSA-SHA256、ECDSA-SHA384、および ECDSA-SHA512 です。
RSA-SHA1 は、SHA1 ハッシュの RSA 署名 (非対称鍵のペアを使用) です。
RSA-SHA256 は、SHA256 ハッシュの RSA 署名です。
RSA-SHA384 は、SHA384 ハッシュの RSA 署名です。
RSA-SHA512 は、SHA512 ハッシュの RSA 署名です。
RSA は、RSA-SHA1 と同じです。
ECDSA-SHA256 は、SHA256 ハッシュの ECDSA 署名です。
ECDSA-SHA384 は、SHA384 ハッシュの ECDSA 署名です。
ECDSA-SHA512 は、SHA512 ハッシュの ECDSA 署名です。
- data
- 型: Blob
- 署名するデータ。
- signature
- 型:
- Blob
- RSA 署名。
- certDevName
- 型: String
- Salesforce 組織の [証明書と鍵の管理] ページで、署名に使用するために保存された証明書の [一意の名前]。
[証明書と鍵の管理] ページにアクセスするには、[設定] から、[クイック検索] ボックスに「証明書と鍵の管理」と入力し、[証明書と鍵の管理] を選択します。
戻り値
型: Blob
例
1Blob data = Blob.valueOf('12345qwerty');
2Blob signature = Crypto.signWithCertificate('RSA-SHA256', data, 'signingCert');
3Boolean verified = Crypto.verify('RSA-SHA512', data, signature, 'signingCert');verifyHMac(String algorithmName, Blob input, Blob privateKey, Blob macToVerify)
署名
public static Blob verifyHMac(String algorithmName, Blob input, Blob privateKey, Blob macToVerify)
パラメータ
戻り値
型: Boolean
例
1String salt = String.valueOf(Crypto.getRandomInteger());
2String key = 'key';
3Blob mac = Crypto.generateMac('HmacSHA256', Blob.valueOf(salt), Blob.valueOf(key));
4Boolean verified = Crypto.verifyHMac('HmacSHA256', Blob.valueOf(salt), Blob.valueOf(key), mac);