HarmonyOS鸿蒙Next中AES128|CBC|PKCS7的加密问题
HarmonyOS鸿蒙Next中AES128|CBC|PKCS7的加密问题 加密后字段内容不符的问题 在对jsonstring进行加密时,使用cryptoFramework的AES128|CBC|PKCS7进行加密
3 回复
参考demo试试
import cryptoFramework from '@ohos.security.cryptoFramework';
import buffer from '@ohos.buffer';
@Component
@Entry
struct Index {
getCBCResult: getCBC = new getCBC();
keys: string = 'NJNGYVWTELBR2A3R';
iv: string = 'KUGEPZ44SKKKMM30'
jsonString: string = '上述json字符串'
build() {
Column() {
Button("AES128|CBC|PKCS7加密").onClick(async () => {
let ciphertextCBC = await this.getCBCResult.encryptAESByCBC(this.jsonString, this.keys, this.iv)
console.log("aes Encrypt = " + ciphertextCBC);
})
}
}
}
class getCBC {
async encryptAESByCBC(content: string, publicKey: string, iv: string): Promise<string> {
let result = ""
try {
let pkBlob: cryptoFramework.DataBlob = {
data: stringToUint8Array(publicKey)
};
let generator = cryptoFramework.createSymKeyGenerator('AES128');
let globalKey = await generator.convertKey(pkBlob);
let ivData = stringToUint8Array(iv);
let ivdata: cryptoFramework.DataBlob = { data: ivData };
let newIv: cryptoFramework.IvParamsSpec = { iv: ivdata, algName: 'IvParamsSpec' } //cbc 模式的参数
let mode = cryptoFramework.CryptoMode.ENCRYPT_MODE;
let globalCipher = cryptoFramework.createCipher('AES128|CBC|PKCS7');
await globalCipher.init(mode, globalKey, newIv);
let plainText: cryptoFramework.DataBlob = { data: stringToUint8Array(content) };
let encryptData: cryptoFramework.DataBlob = await globalCipher.doFinal(plainText);
result = uint8ArrayToHexStr(encryptData.data);
} catch (err) {
console.log(err.message)
}
return result;
}
}
function stringToUint8Array(str: string): Uint8Array {
return new Uint8Array(buffer.from(str, 'utf-8').buffer);
}
function uint8ArrayToHexStr(data: Uint8Array): string {
return buffer.from(data.buffer).toString('hex');
}
更多关于HarmonyOS鸿蒙Next中AES128|CBC|PKCS7的加密问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,AES128|CBC|PKCS7的加密可以通过cryptoFramework
模块实现。首先,创建对称密钥生成器SymKeyGenerator
,指定算法为AES128
。然后,生成对称密钥SymKey
。接着,创建加密操作Cipher
,设置模式为CBC
,填充方式为PKCS7
。最后,使用Cipher
进行加密操作,输入数据和密钥,输出加密后的数据。
示例代码如下:
import cryptoFramework from '@ohos.security.cryptoFramework';
let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
let symKey = symKeyGenerator.generateSymKey();
let cipher = cryptoFramework.createCipher('AES128|CBC|PKCS7');
cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null);
let input = { data: new Uint8Array([1, 2, 3, 4, 5]) };
cipher.doFinal(input).then(output => {
console.log('Encrypted data:', output.data);
});
此代码展示了如何在HarmonyOS鸿蒙Next中使用AES128|CBC|PKCS7进行加密。
在HarmonyOS鸿蒙Next中,使用AES128|CBC|PKCS7进行加密时,首先确保密钥长度为16字节,IV(初始化向量)同样为16字节。通过javax.crypto.Cipher
类进行加密操作,设置模式为Cipher.ENCRYPT_MODE
,并使用AES/CBC/PKCS7Padding
算法。示例代码如下:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
byte[] encrypted = cipher.doFinal(plainText.getBytes());
确保密钥和IV的安全性,避免硬编码。