错误:Bad Base64Coder输入字符错误

时间:2010-03-29 02:48:30

标签: java base64

我目前正面临一个名为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; }

3 个答案:

答案 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值,但不能与某个cipherencoder进行核心关联。以下是给定链接之前的一些摘录:

  

<强>然·DOM
   ADJ。
   1。没有特定的模式,目的或目标


  

<强>密码
  在cryptography中,一个密码(或密码)   是algorithm表演   encryptiondecryption - 一系列   可以是明确定义的步骤   随后作为一个程序。


  

<强>编码
  编码是一个过程   从一个转换信息   格式化为另一种。相反的   操作称为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]