HarmonyOS开发中如何实现AES_128_ECB_PKCS5Padding加解密算法?
加密算法:
输入:
key: 加密key,16位的普通字符串
content:待加密内容,普通字符串
输出:
result:加密之后的内容,base64编码的字符串
解密算法:
输入:
key: 加密key,16位的普通字符串
content:待解密内容,base64编码的字符串
输出:
result:解密之后的内容,普通字符串
HarmonyOS开发中如何实现AES_128_ECB_PKCS5Padding加解密算法?
加密算法:
输入:
key: 加密key,16位的普通字符串
content:待加密内容,普通字符串
输出:
result:加密之后的内容,base64编码的字符串
解密算法:
输入:
key: 加密key,16位的普通字符串
content:待解密内容,base64编码的字符串
输出:
result:解密之后的内容,普通字符串
在HarmonyOS开发中,实现AES_128_ECB_PKCS5Padding加解密算法,你可以使用Java加密扩展(Java Cryptography Extension, JCE)提供的类。由于HarmonyOS支持Java或JavaScript等编程语言(这里假设使用Java),下面我将给出使用Java实现的示例代码。
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AESUtil {
// AES加密,ECB模式,PKCS5Padding填充
public static String encryptAES(String key, String content) throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128); // 对于AES-128位,此参数可以省略
SecretKey secretKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encrypted = cipher.doFinal(content.getBytes());
return Base64.getEncoder().encodeToString(encrypted);
}
// 省略解密方法,以下给出
}
// AES解密,ECB模式,PKCS5Padding填充
public static String decryptAES(String key, String encrypted) throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128); // 对于AES-128位,此参数可以省略
SecretKey secretKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] original = cipher.doFinal(Base64.getDecoder().decode(encrypted));
return new String(original);
}
}
public class Main {
public static void main(String[] args) {
try {
String key = "1234567890123456"; // 16位密钥
String content = "Hello, HarmonyOS!";
// 加密
String encrypted = AESUtil.encryptAES(key, content);
System.out.println("Encrypted: " + encrypted);
// 解密
String decrypted = AESUtil.decryptAES(key, encrypted);
System.out.println("Decrypted: " + decrypted);
} catch (Exception e) {
e.printStackTrace();
}
}
}
请注意,ECB模式并不推荐使用于安全要求较高的场景,因为它不提供块之间的链式加密,因此相同的明文块会产生相同的密文块,这可能会在某些情况下暴露信息。如果可能,考虑使用CBC(Cipher Block Chaining)或其他更安全的模式。此外,密钥管理(如密钥的存储和传输)也是加密过程中需要考虑的重要方面。
1 回答1.1k 阅读✓ 已解决
1 回答1.1k 阅读
1 回答971 阅读
1 回答944 阅读
1 回答851 阅读
819 阅读
702 阅读
解决方案请参考下述demo,并与自身实现进行适配: