使用forge进行AES-CBC加密

官网例子(自己补充cryptoData哈)
随机生成的16位key和iv(用来补位的)

function encryptByForge() {
        var key = forge.random.getBytesSync(16);
        var iv = forge.random.getBytesSync(16);
        var cipher = forge.cipher.createCipher('AES-CBC', key);
        cipher.start({
            iv: iv
        });
        cipher.update(forge.util.createBuffer(JSON.stringify(cryptoData)));
        cipher.finish();
        // outputs encrypted hex
        return forge.util.encode64(cipher.output.getBytes());
    }

如果同crypto-js的结果不同,你可以尝试把官网的output.toHex换成getBytes再用base64编码。

当key 和 iv是协商给定的怎么办
key为server base64对二进制编码下发的
iv是16为随机字符串 要回传给server的

const keyBytes = forge.util.createBuffer(forge.util.decode64(key), 'binary').getBytes(16);
const encodeIv = forge.util.encodeUtf8(iv);

需要将key 转为16位bytes,对iv做相应的encodeUtf8操作即可

你可能感兴趣的:(使用forge进行AES-CBC加密)