android - 我无法在android中将base64编码的字符串转换为十六进制字符串?
问题描述
我正在使用AES
(Rijndael)加密方法来加密字符串。使用的变换是ECB_PKCS5PADDING
。它将返回一个base64
编码字符串。我已经使用函数解码了字符串base64
并转换为hex
使用函数。代码片段附在下面。
private void encrptString()
{
sample = "<xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
String encrypt = Encoder.BuilderAES()
.message(sample)
.method(AES.Method.AES_ECB_PKCS5PADDING)
.key("xxxxxxxxxxxxxx")
.keySize(AES.Key.SIZE_128)
.encrypt();
System.out.println("encrypt"+encrypt);
String stringFromBase = new String(Base64.decode(encrypt,Base64.DEFAULT));
System.out.println("base64"+stringFromBase.trim());
String hex= null;
try {
hex = toHex(stringFromBase);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Toast.makeText(this, hex, Toast.LENGTH_SHORT).show();
System.out.println("hex"+hex.trim());
}
public String toHex(String arg) throws UnsupportedEncodingException {
return String.format("%040x", new BigInteger(1, arg.getBytes("UTF-8")));
}
base64 输入字符串:
O3Kmyftikp0lY/8SVWMiLFCn9sdQX7HauqdLZXcE+jkVcZH7kfPD/ jSLIC2wlP1iQTaiynoaW8A7L1INEYunkmCWT2eVwumwouHVT7d5Kq /sqEcB9/9pyyAuSjrQxtCgJlHm7dlvt0lVEHD2pHnEAhZTRtuuy6b 8MNI7W4jLn+/ZNEqZxdJll26a52D7ceFv
预期输出:
3b72a6c9fb62929d2563ff125563222c50a7f6c7505fb1dabaa74b657704fa391571 91fb91f3c3fe348b202db094fd624136a2ca7a1a5bc03b2f520d118ba79260964f67 95c2e9b0a2e1d54fb7792aafeca84701f7ff69cb202e4a3ad0c6d0a02651e6edd96fb 749551070f6a479c402165346dbaecba6fc30d23b5b88cb9fe fd9344a99c5d265976e9ae760fb71e16f
我得到这个输出:
3b72efbfbdefbfbdefbfbd62efbfbdefbfbd2563efbfbd125563222c50efbfbdefbfbd efbfbd505fefbfbddabaefbfbd4b657704efbfbd391571efbfbdefbfbdefbfbdefbfbd efbfbd34efbfbd202defbfbdefbfbdefbfbd624136efbfbdefbfbd7a1a5befbfbd3b2f 520d11efbfbdefbfbdefbfbd60efbfbd4f67efbfbdefbfbde9b0a2efbfbdefbfbd4fef bfbd792aefbfbdefbfbd4701efbfbdefbfbd69efbfbd202e4a3aefbfbdefbfbdd0a026 51efbfbdefbfbdefbfbd6fefbfbd49551070efbfbd79efbfbd02165346dbaecba6efbf bd30efbfbd3b5befbfbdcb9fefbfbdefbfbd344aefbfbdefbfbdefbfbd65efbfbd6eef bfbdefbfbd60efbfbd
解决方案
我会将解码后的 Base64 保留为 abyte[]
并对其进行编码:
String b64 = "O3Kmyftikp0lY/8SVWMiLFCn9sdQX7HauqdLZXcE+jkVcZH7kfPD/ jSLIC2wlP1iQTaiynoaW8A7L1INEYunkmCWT2eVwumwouHVT7d5Kq /sqEcB9/9pyyAuSjrQxtCgJlHm7dlvt0lVEHD2pHnEAhZTRtuuy6b 8MNI7W4jLn+/ZNEqZxdJll26a52D7ceFv";
StringBuilder hexStringBuilder = new StringBuilder();
for (byte b : Base64.decode(b64, Base64.DEFAULT)) {
hexStringBuilder.append(String.format("%02x", b));
}
String hex = hexStringBuilder.toString()
推荐阅读
- java - 如何从数组对象中删除 £ 符号并保存它?
- .net - 将 .NET Core 登录到文件和控制台 - 带有时间戳
- oracle - 从静态内容 oracle apex 打印
- elasticsearch - Elasticsearch:搜索分数让我困惑。不同匹配级别的相同分数
- java - 当按钮是图像时如何使用Java HttpURLConnection提交表单
- typescript - 导入 serverless-http 错误 - 无法调用类型缺少调用签名的表达式
- javascript - 使用 ESLint 和 Prettier 时在 VS Code 中提供哪些用户设置以进行格式化/linting?(阅读说明)
- survival-analysis - coxModelFrame.coxph(object) 中的错误:对 coxph 的调用中的无效对象集 x=TRUE
- asp.net-core - MVC Razor Core2.0 在视图中显示计算结果
- gradle - Gradle 类路径包含多个 SLF4J 绑定