//加密
function tcpEncrypt(value: string, iv: string, key: string): Uint8Array {
let cipher = cryptoFramework.createCipher('AES128|CBC|NoPadding');
let siv = genIvParamsSpec(iv);
let symKey = genSymKeyByData(StrUtil.strToUint8Array(key));
cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, siv);
let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(value, 'utf-8').buffer) };
let cipherData = cipher.doFinalSync(plainText);这一行崩溃
return cipherData.data;
}
崩溃日志:
Error message:do final fail!
Error code:
Stacktrace:
at tcpEncrypt (entry/src/main/ets/utils/Aes.ets:116:20)
at tcpEncryptData (entry/src/main/ets/utils/Aes.ets:14:10)
at toBuffer (entry/src/main/ets/utils/SQHeaderEx.ets:81:33)
at send (entry/src/main/ets/utils/TcpSocket.ets:96:20)
at getTcpPublicKey (entry/src/main/ets/utils/CommonUtil.ets:60:5)
at anonymous (entry/src/main/ets/utils/TcpSocket.ets:42:7)
用NoPadding时加密原始数据必须自行保持对齐32字节整数倍,否则会报错,代码中需要自行检测原始数据转换成Uint8Array格式后长度是否为32的倍数以及自行补齐,然后解密时还得操心去除补齐内容,因此可以考虑使用PKCS7替代。