HarmonyOS 鸿蒙Next 实现AES加密算法
HarmonyOS 鸿蒙Next 实现AES加密算法
目前再android项目里面对一个字符串是这样进行加密的,鸿蒙同样也要保持一致的加密方式,请问根据android的加密步骤怎么修改成鸿蒙的呢?目前一直加密失败
public class SecurityAESUtils {
private static String KEY = “xxxxxxxxxxxxxxxx”; // 16 字节密钥
public static String encrypt(String data) {
String ivString = “xxxxxxxxxxxxxxxx”; // 16 字节偏移量
//偏移量
byte[] iv = ivString.getBytes();
try {
Cipher cipher = Cipher.getInstance(“AES/CBC/NoPadding”);
int blockSize = cipher.getBlockSize();
byte[] dataBytes = data.getBytes();
int length = dataBytes.length;
//计算需填充长度
if (length % blockSize != 0) {
length = length + (blockSize - (length % blockSize));
}
byte[] plaintext = new byte[length];
//填充
System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);
SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(), “AES”);
//设置偏移量参数
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
byte[] encryped = cipher.doFinal(plaintext);
return parseByte2HexStr(encryped);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static String parseByte2HexStr(byte[] buf) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; ++i) {
String hex = Integer.toHexString(buf[i] & 255);
if (hex.length() == 1) {
hex = ‘0’ + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}
}
16个字节的密钥,对应鸿蒙是AES128,对应的加密方式可以参考下如下代码
function genSymKeyByData() {
let key16 = new Uint8Array(buffer.from(keyData, 'utf-8').buffer)
let symKeyBlob: cryptoFramework.DataBlob = { data: key16 };
let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128');
let symKey = aesGenerator.convertKeySync(symKeyBlob);
return symKey;
}
// 加密消息
function aesEncrypt(message: string) {
let symKey = genSymKeyByData();
let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, ‘utf-8’).buffer) };
let encoder = cryptoFramework.createCipher(‘AES128|CBC|NoPadding’’);
encoder.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null);
let cipherData = encoder.doFinalSync(plainText);
return new util.Base64Helper().encodeToStringSync(cipherData.data);
}
HarmonyOS 鸿蒙Next实现AES加密算法,可以通过系统提供的cryptoFramework或crypto模块来完成。以下是实现AES加密的基本步骤:
- 生成密钥:使用cryptoFramework或crypto模块的密钥生成功能,创建一个AES对称密钥。密钥长度可以是128位、192位或256位,根据安全需求选择。
- 选择加密模式:AES算法支持多种加密模式,如ECB、CBC、OFB、CFB、CTR、GCM和CCM等。其中,CBC模式通过引入反馈机制,适用于文件加密等场景,可以有效防止ECB模式中相同明文块加密结果相同的问题。
- 加密数据:使用生成的密钥和选定的加密模式,对明文数据进行加密。在CBC模式下,还需要生成一个初始化向量(IV),它应在每次加密时随机生成且不同。
- 处理加密结果:加密后的数据通常以二进制形式存在,可以根据需要将其转换为Base64编码或其他格式,以便存储或传输。
如果在实现过程中遇到问题,请检查密钥、IV的正确性,以及数据处理的格式和块大小是否符合要求。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。