【发布时间】:2014-06-01 13:18:28
【问题描述】:
我使用下面的方法来生成 aes 加密的密码。
我的 aes 需要 16 个字节作为密钥。
这是我获取密钥的方式
public byte[] sha256digest16(String[] list) throws NoSuchAlgorithmException, UnsupportedEncodingException {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.reset();
for(String s: list){
digest.update(s.getBytes("UTF-8"));
}
byte[] b = digest.digest();
return String.format("%0" + (b.length) + 'x', new BigInteger(1, b)).getBytes("UTF-8");
}
但是,它是 64 字节。我怎样才能让这个方法返回一个 16 字节的字符串
编辑 我这样做的主要原因是因为我的python代码是
from Crypto.Hash import SHA256
myHash = SHA256.new()
myHash.update("265jMeges")
print myHash.hexdigest()
哪个输出
917ef7e7be4a84e279b74a257953307f1cff4a2e3d221e363ead528c6b556edb
is的java输出在哪里
efbfbd7eefbfbdefbfbd4aefbfbdefbfbd79efbfbd4a257953307f1cefbfbd4a2e3d221e363eefbfbd52efbfbd6b556eefbfbd
对于相同的字符串。为什么它们不同?
【问题讨论】:
-
如果你得到 64 个字节,你确定你没有使用 SHA512 吗?无论哪种方式,当前的哈希都不会给出短至 128 位的结果,因此您只需要截断输出即可。
-
您能告诉我如何截断该输出吗?
标签: java encryption hash cryptography hex