HarmonyOS鸿蒙Next 5.0.0中使用ArkTS实现AES/ECB/PKCS5Padding数据加解密
HarmonyOS鸿蒙Next 5.0.0中使用ArkTS实现AES/ECB/PKCS5Padding数据加解密 已经有了安卓版本的应用,想要开发harmonyOs版本的,但是接口数据加解密没有调通。
下面是java语言的
//用这个方式加密数据,key的获取方式在下方提供
public static byte[] aesEncrypt2(String str, String key) throws Exception {
if (str == null || key == null) {
return null;
}
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "AES"));
byte[] bytes = cipher.doFinal(str.getBytes("utf-8"));
return bytes;
}
key的获取方式如下
//随机数种子
final static char[] CHARS_ALL = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9'};
// 随机密钥
Random rnd = new Random();
StringBuilder keyStrBui = new StringBuilder();
for (int i = 0; i < 16; i++) {
keyStrBui.append(String.valueOf(CHARS_ALL[rnd.nextInt(62)]));
}
String key = keyStrBui.toString();
下面是我写的arkts版本的,出来的结果完全不一样,该怎么写?
static aesEncrypt(message: string, callback: Function) {
try {
let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]);
let symKey = CipherOffice.genSymKeyByData(keyData);
let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) };
let encryptText = CipherOffice.encryptMessage(symKey, plainText);
let decryptText = CipherOffice.decryptMessage(symKey, encryptText);
if (plainText.data.toString() === decryptText.data.toString()) {
Logger.d("encryptData", 'decrypt ok');
Logger.d("encryptData", 'decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8'));
} else {
Logger.d("encryptData", 'decrypt failed');
}
callback(encryptText.data.toString())
} catch (error) {
Logger.d("encryptData", `AES ECB “${error}“, error code: ${error.code}`);
}
}
// 解密消息
static decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) {
let decoder = cryptoFramework.createCipher('AES128|ECB|PKCS7');
decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null);
let decryptData = decoder.doFinalSync(cipherText);
return decryptData;
}
// 加密消息
static encryptMessage(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) {
let cipher = cryptoFramework.createCipher('AES128|ECB|PKCS7');
cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null);
let cipherData = cipher.doFinalSync(plainText);
return cipherData;
}
更多关于HarmonyOS鸿蒙Next 5.0.0中使用ArkTS实现AES/ECB/PKCS5Padding数据加解密的实战教程也可以访问 https://www.itying.com/category-93-b0.html
加密出来的Uint8Array数据,通过textDecoder.decodeWithStream(input)方法转成string之后,返回的string是乱码(this result =
在HarmonyOS鸿蒙Next 5.0.0中,使用ArkTS实现AES/ECB/PKCS5Padding数据加解密可以通过@ohos.security.crypto
模块完成。首先,导入相关模块:
import cryptoFramework from '@ohos.security.crypto';
创建对称密钥生成器并生成AES密钥:
let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
let keyBlob = symKeyGenerator.convertKey({ data: new Uint8Array(16) });
创建加密器并设置加密模式为AES/ECB/PKCS5Padding:
let cipher = cryptoFramework.createCipher('AES128|ECB|PKCS5');
cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, keyBlob, null);
加密数据:
let plainText = 'Hello, HarmonyOS!';
let input = { data: new Uint8Array(plainText.split('').map(char => char.charCodeAt(0))) };
cipher.doFinal(input).then(output => {
console.log('Encrypted data:', output.data);
});
创建解密器并设置解密模式为AES/ECB/PKCS5Padding:
let decipher = cryptoFramework.createCipher('AES128|ECB|PKCS5');
decipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, keyBlob, null);
解密数据:
decipher.doFinal(output).then(decrypted => {
console.log('Decrypted data:', new TextDecoder().decode(decrypted.data));
});
以上代码展示了如何在HarmonyOS鸿蒙Next 5.0.0中使用ArkTS实现AES/ECB/PKCS5Padding数据加解密。
在HarmonyOS鸿蒙Next 5.0.0中,使用ArkTS实现AES/ECB/PKCS5Padding数据加解密可以通过cryptoFramework
模块完成。首先,创建Cipher
实例并指定算法为AES/ECB/PKCS5Padding
。然后,使用init
方法初始化加密或解密模式,并传入密钥。最后,调用doFinal
方法进行数据加解密。示例代码如下:
import cryptoFramework from '@ohos.security.cryptoFramework';
async function aesEncryptDecrypt() {
const key = cryptoFramework.createSymKeyGenerator('AES').generateSymKey();
const cipher = cryptoFramework.createCipher('AES/ECB/PKCS5Padding');
// 加密
await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, key);
const encrypted = await cipher.doFinal(new Uint8Array([1, 2, 3]));
// 解密
await cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, key);
const decrypted = await cipher.doFinal(encrypted);
}
此代码展示了如何使用ArkTS进行AES/ECB/PKCS5Padding加解密。