CryptoKey
4D ランゲージの CryptoKey
クラスは、非対称の暗号化キーペアをカプセル化します。
このクラスは 4D
クラスストアより提供されます。
このクラスの包括的な概要については、CryptoKey: 暗号化、復号化、署名、検証! ブログ記事を参照ください。
概要
4D.CryptoKey.new( settings : Object ) : 4D.CryptoKey 暗号化キーペアをカプセル化する 4D.CryptoKey オブジェクトを新規作成します |
.curve : Text キーの楕円曲線名 |
.decrypt( message : Text ; options : Object ) : Object 秘密 鍵を使って message を復号します |
.encrypt( message : Text ; options : Object ) : Text 公開 鍵を使って message を暗号化します |
.getPrivateKey() : TextCryptoKey オブジェクトの秘密鍵を返します (PEM形式) |
.getPublicKey() : TextCryptoKey オブジェクトの公開鍵を返します (PEM形式) |
.sign (message : Text ; options : Object) : Text utf8 形式の message 文字列を署名します |
.size : Integer キーのサイズ (ビット単位) |
.type : Text キーのタイプ: "RSA", "ECDSA", "PEM" |
.verify( message : Text ; signature : Text ; options : Object) : object utf8 形式の message 文字列の署名を検証します。 |
4D.CryptoKey.new()
履歴
リリース | 内容 |
---|---|
18 R4 | 追加 |
4D.CryptoKey.new( settings : Object ) : 4D.CryptoKey
引数 | 型 | 説明 | |
---|---|---|---|
settings | オブジェクト | -> | キーペアを生成・ロードするための設定 |
戻り値 | 4D.CryptoKey | <- | 暗号化キーペアをカプセル化したオブジェクト |
4D.CryptoKey.new()
関数は、 暗号化キーペアをカプセル化する 4D.CryptoKey
オブジェクトを新規作成します。この暗号化キーペアは settings オブジェクト引数に基づきます。 新規の RSA または ECDSA キーを生成するほか、PEM 形式の既存のキーペアをロードすることができます。
settings
プロパティ | 型 | 説明 |
---|---|---|
type | text | 作成するキーのタイプを定義します: |
curve | text | ECDSA 曲線名 |
pem | text | ロードする PEM 形式の暗号化キー |
size | integer | RSA キーのサイズ (ビット単位) |
CryptoKey
戻り値の CryptoKey
オブジェクトは、暗号化キーペアをカプセル化します。 これは共有オブジェクトのため、複数の 4D プロセスによって同時使用できます。
例題 1
メッセージが秘密鍵で署名され、その署名は対応する公開鍵で検証されます。 以下のコードは、簡単なメッセージの署名を作成し、検証するものです。
- Bob側:
// メッセージを作成します
$message:="hello world"
Folder(fk desktop folder).file("message.txt").setText($message)
// キーを作成します
$type:=New object("type";"RSA")
$key:=4D.CryptoKey.new($type)
// 公開鍵を取得して保存します
Folder(fk desktop folder).file("public.pem").setText($key.getPublicKey())
// 署名を base64 形式で取得して保存します
Folder(fk desktop folder).file("signature").setText($key.sign($message;$type))
/*Bob はメッセージと公開鍵、署名を Alice に送信します*/
- Alice側:
// メッセージと公開鍵、署名を取得します
$message:=Folder(fk desktop folder).file("message.txt").getText()
$publicKey:=Folder(fk desktop folder).file("public.pem").getText()
$signature:=Folder(fk desktop folder).file("signature").getText()
// キーを作成します
$type:=New object("type";"PEM";"pem";$publicKey)
$key:=4D.CryptoKey.new($type)
// 署名を検証します
If ($key.verify($message;$signature;$type).success)
// 署名は有効です
End if
例題 2
たとえば ES256 JSON Web Token (JWT) を作成するために新規 ECDSA キーペアを使ってメッセージの署名と検証をおこないます。
// 新規 ECDSA キーペアの生成
$key:=4D.CryptoKey.new(New object("type";"ECDSA";"curve";"prime256v1"))
// base64 形式で署名を取得
$message:="hello world"
$signature:=$key.sign($message;New object("hash";"SHA256"))
// 署名の検証
$status:=$key.verify($message;$signature;New object("hash";"SHA256"))
ASSERT($status.success)
.curve
履歴
リリース | 内容 |
---|---|
18 R4 | 追加 |
.curve : Text
ECDSA キーのみ: キーの楕円曲線名. 通常、ES256 (デフォルト) の場合は "prime256v1"、ES384 の場合は "secp384r1"、ES512 の場合は "secp521r1"。
.decrypt()
履歴
リリース | 内容 |
---|---|
18 R4 | 追加 |
.decrypt( message : Text ; options : Object ) : Object
引数 | 型 | 説明 | |
---|---|---|---|
message | Text | -> | options.encodingEncrypted を使ってデコードし復号するメッセージ文字列 |
options | Object | -> | デコーディングオプション |
戻り値 | Object | <- | ステータス |
.decrypt()
関数は、 秘密 鍵を使って message を復号します. 使用されるアルゴリズムはキーの種類に依存します。
キーは RSA キーでなければならず、アルゴリズムは RSA-OAEP です (RFC 3447 参照)。
options
プロパティ | 型 | 説明 |
---|---|---|
hash | text | 使用する Digest アルゴリズム。 例: "SHA256", "SHA384", "SHA512"。 |
encodingEncrypted | text | 復号するバイナリ形式に message を変換するためのエンコーディング。 可能な値: "Base64" または "Base64URL"。 デフォルト値: "Base64" |
encodingDecrypted | text | バイナリの復号メッセージを文字列に変換するためのエンコーディング。 可能な値: "UTF-8", "Base64" または "Base64URL"。 デフォルト値: "UTF-8" |
戻り値
message
の復号に成功した場合には、success プロパティが true
に設定された status オブジェクトを返します。
プロパティ | 型 | 説明 |
---|---|---|
success | boolean | メッセージの復号に成功した場合は true |
戻り値 | text | options.encodingDecrypted を使って復号およびデコードされたメッセージ |
errors | collection | success が false の場合、エラーのコレクションが含まれている場合があります。 |
キーまたはアルゴリズムが合致しないなどの理由で message の復号に成功しなかった場合、返される status
オブジェクトの status.errors
プロパティにはエラーのコレクションが格納されます。
.encrypt()
履歴
リリース | 内容 |
---|---|
18 R4 | 追加 |
.encrypt( message : Text ; options : Object ) : Text
引数 | 型 | 説明 | |
---|---|---|---|
message | Text | -> | options.encodingDecrypted を使ってエンコードし暗号化するメッセージ文字列 |
options | Object | -> | エンコーディングオプション |
戻り値 | Text | <- | options.encodingEncrypted を使って暗号化およびエンコードされたメッセージ |
.encrypt()
関数は、 公開 鍵を使って message を暗号化します. 使用されるアルゴリズムはキーの種類に依存します。
キーは RSA キーでなければならず、アルゴリズムは RSA-OAEP です (RFC 3447 参照)。
options
プロパティ | 型 | 説明 |
---|---|---|
hash | text | 使用する Digest アルゴリズム。 例: "SHA256", "SHA384", "SHA512"。 |
encodingEncrypted | text | バイナリの暗号化メッセージを文字列に変換するためのエンコーディング。 可能な値: "Base64" または "Base64URL"。 デフォルト値: "Base64" |
encodingDecrypted | text | 暗号化するバイナリ形式に message を変換するためのエンコーディング。 可能な値: "UTF-8", "Base64" または "Base64URL"。 デフォルト値: "UTF-8" |
戻り値
戻り値は暗号化されたメッセージです。
.getPrivateKey()
履歴
リリース | 内容 |
---|---|
18 R4 | 追加 |
.getPrivateKey() : Text
引数 | 型 | 説明 | |
---|---|---|---|
戻り値 | Text | <- | PEM 形式の秘密鍵 |
.getPrivateKey()
関数は、 CryptoKey
オブジェクトの秘密鍵を返します (PEM形式) 。無い場合は空の文字列を返します。