Java Base64使用Amazon Services进行编码

时间:2012-10-02 20:51:40

标签: java encryption encoding signature amazon-sns

我正在使用此处的确切代码:
http://docs.amazonwebservices.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AuthJavaSampleHMACSignature.html

为我的应用程序生成签名。但是,在Eclipse

中无法识别一行代码
result = Encoding.EncodeBase64(rawHmac);

Eclipse说它无法识别“编码”类。这是确切的错误:

EncodeBase64(byte [])方法未定义为编码

类型 我试过导入以下三件事:

javax.sound.sampled.AudioFormat.Encoding;
org.apache.commons.codec.binary.Base64;
org.omg.IOP.Encoding;

然而,所有这三个都告诉我他们不认识'EncodeBase64'功能。有人知道导入我应该用于上面链接的代码吗?

3 个答案:

答案 0 :(得分:2)

标准Java javax.xml.bind.DataTypeConverter支持Base64编码/解码。这将是一个零开销选择。

答案 1 :(得分:2)

请注意,没有熟练的Java开发人员会使用大写字母作为方法的开头,因此如果您没有输入拼写错误,则不能指望在任何标准库中找到Encoding.EncodeBase64。你最好使用另一个Base 64编码器/解码器,例如Apache Commons Codec中找到的编码器/解码器 - 这似乎是我可以使用的最好的API。

答案 2 :(得分:0)

另一种编码rawHmac的解决方案就是这个:

String result = new String(encode(rawHmac));

使用此编码功能:

  private static char[] encode(byte[] bytes) {
    final int amount = bytes.length;
    char[] result = new char[2 * amount];

    int j = 0;
    for (int i = 0; i < amount; i++) {
      result[j++] = HEX[(0xF0 & bytes[i]) >>> 4];
      result[j++] = HEX[(0x0F & bytes[i])];
    }

    return result;
  }

  private static final char[] HEX = {
    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
  };