如何使用java生成s3样式的访问/密钥

时间:2011-07-22 21:22:40

标签: java amazon-s3 bouncycastle hmacsha1

我正在尝试使用java以与S3相同的方式生成访问密钥和密钥,但是遇到了一些麻烦。

作为一个起点,我正在看这个bouncy castle example,我已经启动并运行了这个代码,但我不确定两件事1)如何设置它使用与使用HMAC的s3相同的密钥生成-SHA1如概述here和2)如何为用户获取友好的公钥/私钥字符串。

您可能已经猜到我是java加密和充气城堡库的新手,但我确实在bc文档中找到了JCEKeyGenerator.HMACSHA1,但我找不到它的使用示例。任何帮助将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:3)

您需要使用javax.crypto.KeyGenerator来创建AWSAccessKeyIdAWSSecretAccessKey

javax.crypto.KeyGenerator generator = javax.crypto.KeyGenerator.getInstance("HMACSHA1");
generator.init(120);
byte[] awsAccessKeyId = generator.generateKey().getEncoded();
generator.init(240);
byte[] awsSecretAccessKey = generator.generateKey().getEncoded();

然后,你需要对字节进行base64编码(这使用来自mail.jar的MimeUtility):

final ByteArrayOutputStream encoded = new ByteArrayOutputStream();
final OutputStream encoder = javax.mail.internet.MimeUtility.encode(encoded, "base64");
encoder.write(awsAccessKeyId);
encoder.flush();
encoder.close();
String accessKeyId = new String(encoded.toByteArray(), encoding).replaceAll("[\\r\\n]", "");