HarmonyOS 鸿蒙Next 实现AES加密算法

发布于 1周前 作者 phonegap100 来自 鸿蒙OS

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();

    }

}

2 回复

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加密的基本步骤:

  1. 生成密钥:使用cryptoFramework或crypto模块的密钥生成功能,创建一个AES对称密钥。密钥长度可以是128位、192位或256位,根据安全需求选择。
  2. 选择加密模式:AES算法支持多种加密模式,如ECB、CBC、OFB、CFB、CTR、GCM和CCM等。其中,CBC模式通过引入反馈机制,适用于文件加密等场景,可以有效防止ECB模式中相同明文块加密结果相同的问题。
  3. 加密数据:使用生成的密钥和选定的加密模式,对明文数据进行加密。在CBC模式下,还需要生成一个初始化向量(IV),它应在每次加密时随机生成且不同。
  4. 处理加密结果:加密后的数据通常以二进制形式存在,可以根据需要将其转换为Base64编码或其他格式,以便存储或传输。

如果在实现过程中遇到问题,请检查密钥、IV的正确性,以及数据处理的格式和块大小是否符合要求。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部