Skip to main content
版本:v3+

AES-CBC

createCrypto

创建 AES-CBC 对称加密实例。待加密数据长度必须是 16 字节的整数倍。

algorithmId说明API_LEVEL
alg.AES_CBCAES-CBC 对称加密3.0

类型

function createCrypto(algorithmId: typeof alg.AES_CBC, option: AESOptions): AESCrypto | undefined

参数

AESData

类型说明
number[]|ArrayBuffer|Uint8Array待处理的数据

AESOptions

属性类型必填默认值说明
key_bit_lengthnumber-密钥位数,AES-CBC 使用 128
key_encryptboolean|number-密钥是否经过硬件密钥二次加密
private_keyAESData-已有私钥;传入后使用该密钥,不再生成新密钥

AESCrypto

AES-CBC 对称加密实例。

方法

createChiper

创建 AES 私钥;创建实例时已传入私钥则返回该密钥,失败时返回 undefined

createChiper(): AESKeyResult | undefined
AESKeyResult
属性类型说明
private_key_lengthnumber私钥长度
private_keyArrayBuffer私钥数据

encrypt

加密数据,输入长度必须是 16 字节的整数倍

encrypt(data: createCrypto.AESData): AESCipherResult | undefined
AESCipherResult
属性类型说明
dataArrayBuffer加密后的数据
lengthnumber数据长度

decrypt

解密 AES-CBC 数据

decrypt(data: createCrypto.AESData): AESCipherResult | undefined
AESCipherResult
属性类型说明
dataArrayBuffer解密后的数据
lengthnumber数据长度

代码示例

import { alg, createCrypto } from '@zos/crypto'

const plainData = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])

const aes = createCrypto(alg.AES_CBC, {
key_bit_length: 128,
key_encrypt: 1,
})
if (!aes) throw new Error('Failed to create AES-CBC instance')

const keyInfo = aes.createChiper()
if (!keyInfo) throw new Error('Failed to create AES key')

const encrypted = aes.encrypt(plainData)
if (!encrypted) throw new Error('Failed to encrypt data')

const decrypted = aes.decrypt(encrypted.data)
if (!decrypted) throw new Error('Failed to decrypt data')
console.log(new Uint8Array(decrypted.data))

// Create another AES-CBC instance with an existing private key
const existingKey = new Uint8Array(keyInfo.private_key)
const aesWithExistingKey = createCrypto(alg.AES_CBC, {
key_bit_length: 128,
private_key: existingKey,
key_encrypt: 1,
})
if (!aesWithExistingKey) throw new Error('Failed to reuse AES key')

const encryptedAgain = aesWithExistingKey.encrypt(plainData)
const decryptedAgain = encryptedAgain ? aesWithExistingKey.decrypt(encryptedAgain.data) : undefined