java - 如何将“AES”密钥从 byth[] 转换为 UTF-8 字符串
问题描述
解决方案
以字节数组的形式生成一个密钥,您可以使用它来加密和解密过程。
private SecretKey secretKey; // member variables (in class)
public byte[] generateAESKey() {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
if (secretKey == null) {
secretKey = kgen.generateKey();
}
byte[] keyBytes = secretKey.getEncoded();
//Log.i("keyBytes", toHexString(keyBytes));
return keyBytes;
}
catch (Exception ex){
ex.printStackTrace();
}
return null;
}
生成AESKey的结果:
0x04 0x90 0x74 0x21 0x73 0xB9 0x3D 0x1F 0x7B 0x19 0xC4 0x95 0x85 0x20 0xDF 0x27
以可以保存或发送到另一个应用程序的字符串形式生成密钥。
public String getStrAESkey() {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
if (secretKey == null) {
secretKey = kgen.generateKey();
}
String keyStr = toHexString(secretKey.getEncoded());
Log.i("keyStr", keyStr);
return keyStr;
}
catch (Exception ex){
ex.printStackTrace();
}
return null;
}
getStrAESkey() 的结果:
0490742173B93D1F7B19C4958520DF27
//
public String toHexString(byte[] bytes) {
return Utils.printHexBinary(bytes);
}
public byte[] toByteArray(String hexString) {
return Utils.parseHexBinary(hexString);
}
实用程序.java
public class Utils {
private static final char[] hexCode = "0123456789ABCDEF".toCharArray();
private static int hexToBin(char ch) {
if ('0' <= ch && ch <= '9') return ch - '0';
if ('A' <= ch && ch <= 'F') return ch - 'A' + 10;
if ('a' <= ch && ch <= 'f') return ch - 'a' + 10;
return -1;
}
public static byte[] parseHexBinary(String s) {
final int len = s.length();
if (len % 2 != 0)
throw new IllegalArgumentException("hexBinary needs to be even-length: " + s);
byte[] out = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
int h = hexToBin(s.charAt(i));
int l = hexToBin(s.charAt(i + 1));
if (h == -1 || l == -1)
throw new IllegalArgumentException("contains illegal character for hexBinary: " + s);
out[i / 2] = (byte) (h * 16 + l);
}
return out;
}
public static String printHexBinary(byte[] data) {
StringBuilder r = new StringBuilder(data.length * 2);
for (byte b : data) {
r.append(hexCode[(b >> 4) & 0xF]);
r.append(hexCode[(b & 0xF)]);
}
return r.toString();
}
}
推荐阅读
- css - 根据它们拥有的类来显示/隐藏 DOM 元素
- java - Java中不同锁下可变对象的可见性
- c# - 当令牌过期而不是 401 时,ABP 框架在授权过滤器中抛出 500 错误
- python - 将numpy数组的所有元素转换为字符串的最快方法
- javascript - 使用 Leaflet 单击时为每个多边形设置目标 URL
- python - 使用python将字符串数组转换为浮点数
- github - 尝试在 unix:///var/run/docker.sock 连接到 Docker 守护进程套接字时获得权限被拒绝
- node.js - 如何在 GKE 中访问 npm 日志文件?
- ktor - 如何在 Ktor 中列出配置的路由
- javascript - 带有 Cordova 相机插件的 JavaScript - 将图像 FILE_URI 转换为 DATA_URL