Web Crypto APIのパフォーマンスがより高くなります。Cryptoオブジェクトを直接構築することはサポートされていません。エッジ関数ランタイムがグローバルに注入するため、グローバルcryptoインスタンスを直接使用してください。// エンコードconst encodeContent = new TextEncoder().encode('hello world');// cryptoを使用してSHA-256ハッシュ値Promise<ArrayBuffer>を生成します。const sha256Content = await crypto.subtle.digest({ name: 'SHA-256' },encodeContent);const result = new Uint8Array(sha256Content);
// crypto.subtlereadonly subtle: SubtleCrypto;
crypto.getRandomValues(buffer: TypedArray): TypedArray;
属性名 | タイプ | 必須 | 説明 |
buffer | はい |
crypto.randomUUID(): string;
encrypt/decrypt、sign/verify、digestが含まれており、プライバシーや身元確認などのセキュリティ機能を実現するために使用できます。generateKey、deriveKey、importKey/exportKeyが含まれており、鍵の管理に使用できます。crypto.subtle.digest(algorithm: string | object, data: ArrayBuffer): Promise<ArrayBuffer>;
crypto.subtle.encrypt(algorithm: object, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
RSA-OAEPアルゴリズムでは、dataの長さがmodulusLength/8 - 2*hLen -2を超えないことが要求されます。ここで、hLenの値のロジックは以下の通りです:AES-CTR、AES-CBC、AES-GCMでは、dataの長さは1MBに制限されます。crypto.subtle.decrypt(algorithm: object, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
RSA-OAEPアルゴリズムでは、dataの長さはmodulusLength/8です。AES-CTR、AES-CBC、AES-GCMでは、dataの長さは1MBに制限されます。crypto.subtle.sign(algorithm: string | object, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
crypto.subtle.verify(algorithm: string | object, key: CryptoKey, signature: BufferSource, data: ArrayBuffer): Promise<boolean>;
crypto.subtle.generateKey(algorithm: object, extractable: boolean, keyUsages: Array<string>): Promise<CryptoKey | CryptoKeyPair>;
crypto.subtle.deriveKey(algorithm: object, baseKey: CryptoKey, derivedKeyAlgorithm: object, extractable: boolean, keyUsages: Array<string>): Promise<CryptoKey>;
crypto.subtle.importKey(format: string, keyData: BufferSource, algorithm: string | object, extractable: boolean, keyUsages: Array<string>): Promise<CryptoKey>;
crypto.subtle.exportKey(format: string, key: CryptoKey): Promise<ArrayBuffer>;
crypto.subtle.deriveBits(algorithm: object, baseKey: CryptoKey, length: integer): Promise<ArrayBuffer>;
crypto.subtle.wrapKey(format: string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgo: string | object): Promise<ArrayBuffer>;;
crypto.subtle.unwrapKey(format: string, wrappedKey: ArrayBuffer, unwrappingKey: CryptoKey, unwrapAlgo: string | object, unwrappedKeyAlgo: string | object, extractable: boolean, keyUsages: Array<string>): Promise<CryptoKey>;
CryptoKeyは、暗号化アルゴリズムによって生成されたキーを表します。詳細はMDN公式ドキュメントCryptoKeyを参照してください。CryptoKeyオブジェクトを直接構築することはできません。以下のインターフェースを使用してキーを生成してください:CryptoKeyの属性の説明は以下の通りです。属性名 | タイプ | 読み取り専用 | 説明 |
type | string | はい | キーの種類。 |
extractable | boolean | はい | キーがエクスポート可能かどうか。 |
algorithm | object | はい | アルゴリズム関連であり、アルゴリズムに必要なフィールドを含みます。 |
usages | Array<string> | はい | キーの用途。 |
CryptoKeyPairは、暗号化アルゴリズムによって生成されたキーペアを表します。詳細はMDN公式ドキュメント:CryptoKeyPairを参照してください。CryptoKeyPairオブジェクトを直接構築することはできません。以下のインターフェースを使用してキーペアを生成してください:CryptoKeyPairの属性の説明は以下の通りです。Algorithm | encrypt() decrypt() | sign() verify() | wrapKey() unwrapKey() | deriveKey() deriveBits() | generateKey() | importKey() | exportKey() | digest() |
RSASSA-PKCS1-v1_5 | - | ✓ | - | - | ✓ | ✓ | ✓ | - |
RSA-PSS | - | ✓ | - | - | ✓ | ✓ | ✓ | - |
RSA-OAEP | ✓ | - | ✓ | - | ✓ | ✓ | ✓ | - |
ECDSA | - | ✓ | - | - | ✓ | ✓ | ✓ | - |
ECDH | - | - | - | ✓ | ✓ | ✓ | ✓ | - |
HMAC | - | ✓ | - | - | ✓ | ✓ | ✓ | - |
AES-CTR | ✓ | - | ✓ | - | ✓ | ✓ | ✓ | - |
AES-CBC | ✓ | - | ✓ | - | ✓ | ✓ | ✓ | - |
AES-GCM | ✓ | - | ✓ | - | ✓ | ✓ | ✓ | - |
AES-KW | - | - | ✓ | - | ✓ | ✓ | ✓ | - |
HKDF | - | - | - | ✓ | - | ✓ | - | - |
PBKDF2 | - | - | - | ✓ | - | ✓ | - | - |
SHA-1 | - | - | - | - | - | - | - | ✓ |
SHA-256 | - | - | - | - | - | - | - | ✓ |
SHA-384 | - | - | - | - | - | - | - | ✓ |
SHA-512 | - | - | - | - | - | - | - | ✓ |
MD5 | - | - | - | - | - | - | - | ✓ |
function uint8ArrayToHex(arr) {return Array.prototype.map.call(arr, (x) => ((`0${x.toString(16)}`).slice(-2))).join('');}async function handleEvent(event) {const encodeArr = TextEncoder().encode('hello world');// md5を実行します。const md5Buffer = await crypto.subtle.digest({ name: 'MD5' }, encodeArr);// 16進数文字列を出力します。const md5Str = uint8ArrayToHex(new Uint8Array(md5Buffer));const response = new Response(md5Str);return response;}addEventListener('fetch', async (event) => {event.respondWith(handleEvent(event));});
フィードバック