HarmonyOS 鸿蒙Next 对称算法加密模式CBC的初始向量如何设置

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 对称算法加密模式CBC的初始向量如何设置

对于对称算法,如何设置初始向量? 加密源码如下:

let cipher = cryptoFramework.SM4_128.CBC(${paddingMode});
await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, key);
let result = await cipher.doFinal({ data: data });
return result.data;
2 回复
async function SM4ED(plainText) {
    let sm4Generator = cryptoFramework.createSymKeyGenerator('SM4_128');

    let cipher = cryptoFramework.createCipher("SM4_128|CBC|PKCS7");

    let decoder = cryptoFramework.createCipher("SM4_128|CBC|PKCS7");

    let input = { data: stringToUint8Array(plainText) };

    let keydata = { data: stringToUint8Array('yc1436w86vhys51r') };
    // 密钥

    let ivdata = { data: stringToUint8Array('43pr5253zf5mm7jd') };
    // 偏移

    let iv = { iv: ivdata, algName: 'IvParamsSpec' };
    // cbc模式的参数

    try {
        key = await sm4Generator.convertKey(keydata);
        // 加密

        await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, key, iv);
        let cipherData = await cipher.doFinal(input)
        // 解密

        await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, key, iv);
        let result = await decoder.doFinal(cipherData);
        // 解密后的明文

        let str = uint8ArrayToString(result.data);
        AlertDialog.show({ message: "decrypt success ==>" + str });
    } catch (err) {
        console.error(err);
    }
}

更多关于HarmonyOS 鸿蒙Next 对称算法加密模式CBC的初始向量如何设置的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,当使用对称算法(如AES)进行加密,并选用CBC(Cipher Block Chaining)模式时,初始向量(IV,Initialization Vector)的设置至关重要。IV的主要作用是确保即使相同的明文块被多次加密,也会产生不同的密文块,从而提高加密的安全性。

在CBC模式下,IV通常是一个与加密块大小相同的随机值。对于AES算法,加密块大小固定为128位(16字节)。因此,IV也应该是16字节长的随机数据。

设置IV的步骤通常如下:

  1. 生成一个16字节长的随机序列作为IV。
  2. 在加密过程中,将IV与第一个明文块一起处理(通常是通过异或操作),然后作为加密链的起始点。
  3. 将IV与密文一起存储或传输,以便解密时能正确重建加密链。

在编程实现时,可以使用HarmonyOS提供的加密库函数来生成随机IV。确保每次加密时都使用新的IV,以避免加密模式的重复使用带来的安全风险。

如果有任何问题无法解决,请联系官网客服,访问网址:https://www.itying.com/category-93-b0.html

回到顶部