tencent cloud

Tencent Cloud EdgeOne

Web Crypto

ダウンロード
フォーカスモード
フォントサイズ
最終更新日: 2026-10-15 18:20:39
AI翻訳
Web Crypto APIは、Web APIs標準Web Crypto APIに基づいて設計されています。一般的な暗号化操作インターフェースのセットを提供し、純粋なJavaScriptで実装された暗号化インターフェースと比較して、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.subtle
readonly subtle: SubtleCrypto;
一般的な暗号化操作を提供します。例えば、ハッシュ、署名/検証、暗号化/復号などです。詳細はSubtleCryptoを参照してください。

方法

getRandomValues

crypto.getRandomValues(buffer: TypedArray): TypedArray;
ランダムな数値を生成してbufferを満たし、bufferを返します。

パラメータ

属性名
タイプ
必須
説明
buffer
はい
ランダム数バッファで、65536バイトを超えません。詳細はTypedArrayを参照してください。

randomUUID

crypto.randomUUID(): string;
ランダムなUUID(v4)を返します。

SubtleCrypto

一般的な暗号化操作を提供します。例えば、ハッシュ、署名/検証、暗号化/復号などです。詳細はMDN公式ドキュメント:SubtleCryptoを参照してください。
説明:
SubtleCrypto暗号化インターフェースは機能別に2種類に分けられます:
暗号化機能には、encrypt/decrypt、sign/verify、digestが含まれており、プライバシーや身元確認などのセキュリティ機能を実現するために使用できます。
鍵管理機能には、generateKey、deriveKey、importKey/exportKeyが含まれており、鍵の管理に使用できます。

digest

crypto.subtle.digest(algorithm: string | object, data: ArrayBuffer): Promise<ArrayBuffer>;
Promiseオブジェクトを返します。生成されたデータダイジェスト(hash)を含みます。詳細はMDN公式ドキュメント:SubtleCrypto.digestを参照してください。

encrypt

crypto.subtle.encrypt(algorithm: object, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
Promiseオブジェクトを返します。暗号化データを含みます。詳細はMDN公式ドキュメント:SubtleCrypto.encryptを参照してください。
RSA-OAEPアルゴリズムでは、dataの長さがmodulusLength/8 - 2*hLen -2を超えないことが要求されます。ここで、hLenの値のロジックは以下の通りです:
SHA-1: hLen = 20 byte
SHA-256: hLen = 32 byte
SHA-384: hLen = 48 byte
SHA-512: hLen = 64 byte
AES-CTR、AES-CBC、AES-GCMでは、dataの長さは1MBに制限されます。

decrypt

crypto.subtle.decrypt(algorithm: object, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
Promiseオブジェクトを返します。復号データを含みます。詳細はMDN公式ドキュメント:SubtleCrypto.decryptを参照してください。
RSA-OAEPアルゴリズムでは、dataの長さはmodulusLength/8です。
AES-CTR、AES-CBC、AES-GCMでは、dataの長さは1MBに制限されます。

sign

crypto.subtle.sign(algorithm: string | object, key: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer>;
Promiseオブジェクトを返します。データ署名を含みます。詳細はMDN公式ドキュメント:SubtleCrypto.signを参照してください。

verify

crypto.subtle.verify(algorithm: string | object, key: CryptoKey, signature: BufferSource, data: ArrayBuffer): Promise<boolean>;
Promiseオブジェクトを返します。署名検証結果を含みます。詳細はMDN公式ドキュメント:SubtleCrypto.verifyを参照してください。

generateKey

crypto.subtle.generateKey(algorithm: object, extractable: boolean, keyUsages: Array<string>): Promise<CryptoKey | CryptoKeyPair>;
Promiseオブジェクトを返します。キーCryptoKeyまたはキーペアCryptoKeyPairを含みます。詳細はMDN公式ドキュメント:SubtleCrypto.generateKeyを参照してください。

deriveKey

crypto.subtle.deriveKey(algorithm: object, baseKey: CryptoKey, derivedKeyAlgorithm: object, extractable: boolean, keyUsages: Array<string>): Promise<CryptoKey>;
Promiseオブジェクトを返します。キーCryptoKeyを含みます。詳細はMDN公式ドキュメント:SubtleCrypto.deriveKeyを参照してください。

importKey

crypto.subtle.importKey(format: string, keyData: BufferSource, algorithm: string | object, extractable: boolean, keyUsages: Array<string>): Promise<CryptoKey>;
Promiseオブジェクトを返します。キーCryptoKeyを含みます。詳細はMDN公式ドキュメント:SubtleCrypto.importKeyを参照してください。

exportKey

crypto.subtle.exportKey(format: string, key: CryptoKey): Promise<ArrayBuffer>;
Promiseオブジェクトを返します。エクスポートされたキーArrayBufferを含みます。詳細はMDN公式ドキュメント:SubtleCrypto.exportKeyを参照してください。

deriveBits

crypto.subtle.deriveBits(algorithm: object, baseKey: CryptoKey, length: integer): Promise<ArrayBuffer>;
Promiseオブジェクトを返します。疑似乱数バイトArrayBufferを含みます。詳細はMDN公式ドキュメント:SubtleCrypto.deriveBitsを参照してください。

wrapKey

crypto.subtle.wrapKey(format: string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgo: string | object): Promise<ArrayBuffer>;;
Promiseオブジェクトを返します。ラップされたキーArrayBufferを含みます。詳細はMDN公式ドキュメント:SubtleCrypto.wrapKeyを参照してください。

unwrapKey

crypto.subtle.unwrapKey(format: string, wrappedKey: ArrayBuffer, unwrappingKey: CryptoKey, unwrapAlgo: string | object, unwrappedKeyAlgo: string | object, extractable: boolean, keyUsages: Array<string>): Promise<CryptoKey>;
Promiseオブジェクトを返します。アンラップされたキーCryptoKeyを含みます。詳細はMDN公式ドキュメント:SubtleCrypto.unwrapKeyを参照してください。

CryptoKey

CryptoKeyは、暗号化アルゴリズムによって生成されたキーを表します。詳細はMDN公式ドキュメントCryptoKeyを参照してください。CryptoKeyオブジェクトを直接構築することはできません。以下のインターフェースを使用してキーを生成してください:
CryptoKeyの属性の説明は以下の通りです。
属性名
タイプ
読み取り専用
説明
type
string
はい
キーの種類。
extractable
boolean
はい
キーがエクスポート可能かどうか。
algorithm
object
はい
アルゴリズム関連であり、アルゴリズムに必要なフィールドを含みます。
usages
Array<string>
はい
キーの用途。

CryptoKeyPair

CryptoKeyPairは、暗号化アルゴリズムによって生成されたキーペアを表します。詳細はMDN公式ドキュメント:CryptoKeyPairを参照してください。CryptoKeyPairオブジェクトを直接構築することはできません。以下のインターフェースを使用してキーペアを生成してください:
CryptoKeyPairの属性の説明は以下の通りです。
属性名
タイプ
読み取り専用
説明
privateKey
はい
暗号化・復号アルゴリズムでは、秘密鍵は復号に使用されます。署名アルゴリズムでは、秘密鍵は署名に使用されます。
publicKey
はい
暗号化・復号アルゴリズムでは、公開鍵は暗号化に使用されます。署名アルゴリズムでは、公開鍵は署名検証に使用されます。

対応アルゴリズム

エッジ関数は、Web APIs標準WebCryptoで定義されたすべてのアルゴリズムをサポートします。詳細は以下の表に示します。
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));
});

関連参考

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック