我目前正面临一个名为Bad Base64Coder input character at ...
的错误
这是我在java中的代码。
String nonce2 = strNONCE;
byte[] nonceBytes1 = Base64Coder.decode(nonce2);
System.out.println("nonceByte1 value : " + nonceBytes1);
现在的问题是我收到Bad Base64Coder input character
错误,nonceBytes1
值打印为空。我正在尝试从nonce2
解码Base64Coder
。我的strNONCE
值为16
/** Generating nonce value */
public static String generateNonce() {
try {
byte[] nonce = new byte[16];
Random rand;
rand = SecureRandom.getInstance ("SHA1PRNG");
rand.nextBytes(nonce);
//convert byte array to string.
strNONCE = new String(nonce);
}catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return strNONCE;
}
答案 0 :(得分:2)
//convert byte array to string.
strNONCE = new String(nonce);
那不行。你需要对它进行base64编码。
strNONCE = Base64Coder.encode(nonce);
答案 1 :(得分:1)
base64编码的字符串中只包含可打印的字符。您正在从随机字节直接生成strNONCE,因此它将包含不可打印的字符。
你到底想要做什么?
答案 2 :(得分:1)
看起来你只是混淆了一些独立的概念,而且对Java来说也是一个新手。 Base64是一种编码类型,它将“人类不可读”字节数组转换为“人类可读”字符串(编码),反之亦然(解码)。它通常用于将二进制数据作为字符传输或存储在严格需要的地方(由于协议或存储类型)。
SecureRandom
事物不是编码器或解码器。它会返回random值,但不能与某个cipher或encoder进行核心关联。以下是给定链接之前的一些摘录:
<强>然·DOM 强>
ADJ。
1。没有特定的模式,目的或目标
<强>密码强>
在cryptography中,一个密码(或密码) 是algorithm表演 encryption或decryption - 一系列 可以是明确定义的步骤 随后作为一个程序。
<强>编码
编码是一个过程 从一个转换信息 格式化为另一种。相反的 操作称为decoding。
我强烈建议你自己调整这些概念(点击链接了解更多关于它们的信息),而不是将它们放在同一个大洞里。这里至少有一个SSCCE,它展示了如何使用base64正确编码/解码(随机)字节数组(以及如何将数组显示为字符串(人类可读的格式)):
package com.stackoverflow.q2535542;
import java.security.SecureRandom;
import java.util.Arrays;
import org.apache.commons.codec.binary.Base64;
public class Test {
public static void main(String[] args) throws Exception {
// Generate random bytes and show them.
byte[] bytes = new byte[16];
SecureRandom.getInstance("SHA1PRNG").nextBytes(bytes);
System.out.println(Arrays.toString(bytes));
// Base64-encode bytes and show them.
String base64String = Base64.encodeBase64String(bytes);
System.out.println(base64String);
// Base64-decode string and show bytes.
byte[] decoded = Base64.decodeBase64(base64String);
System.out.println(Arrays.toString(decoded));
}
}
(顺便使用Commons Codec Base64)
以下是输出的示例:
[14, 52, -34, -74, -6, 72, -127, 62, -37, 45, 55, -38, -72, -3, 123, 23] DjTetvpIgT7bLTfauP17Fw== [14, 52, -34, -74, -6, 72, -127, 62, -37, 45, 55, -38, -72, -3, 123, 23]