bash中的Java散列函数
我正在尝试制作一个bash脚本,它生成与以下java哈希函数相同的哈希代码:bash中的Java散列函数,java,bash,Java,Bash,我正在尝试制作一个bash脚本,它生成与以下java哈希函数相同的哈希代码: import java.security.Security; import org.apache.commons.codec.binary.Hex; import java.io.UnsupportedEncodingException; public final static String hash(final String _password) throws Exception {
import java.security.Security;
import org.apache.commons.codec.binary.Hex;
import java.io.UnsupportedEncodingException;
public final static String hash(final String _password)
throws Exception
{
String _salt="0c321e8669fce545";
Security.addProvider(new BouncyCastleProvider());
final String algorithm = "SHA-256";
final String encoding = "UTF-8";
MessageDigest md = MessageDigest.getInstance(algorithm);
md.reset();
md.update(_salt);
byte[] digest = md.digest(_password.getBytes(encoding));
char[] hashChars = Hex.encodeHex(digest);
return salt + new String(hashChars);
}
例如,我使用静态salt和ssl方法尝试创建密码哈希:
#!/bin/bash
salt='0c321e8669fce545'
passwordHash=$(echo -n 'hello' | openssl sha256)
finalPassword=$(echo $salt$passwordHash)
但我从来没有得到同样的结果。
有没有办法实现这一点
编辑:我的目标是创建一个平台接受的密码,该平台使用此java函数创建密码。您需要使用
-salt
和-pass
parm。在CentOS上,我在bash中做了如下操作:
############################################
# To be used with the -pass parm of openssl
# It's the salt for creating hash
############################################
export enc_salt="0c321e8669fce545"
encyption_file="/tmp/encrypted_pwd.enc"
echo -n 'hello' | openssl aes-256-cbc -md sha256 -a -salt -pass env:enc_salt -out $encyption_file
# Decrypt
openssl aes-256-cbc -md sha256 -d -a -salt -pass env:enc_salt -in $encyption_file
因为每次运行此操作时,即使使用相同的盐,也会得到不同的哈希值。我怀疑它是否能与您在Java程序中看到的内容相匹配。重要的是,当您在bash
或Java
中对加密进行解密时,它应该为您提供所需的信息
为salt使用环境变量的原因是,任何潜伏在使用ps
命令监视正在执行的内容的人都不会看到salt传递到openssl
在
64位操作系统上
,使用openssl
时,用-base64
替换-a
parm请同时发布您的bash脚本。我已将其添加到我的帖子中。在bash中计算sha256哈希时,您忽略了salt。如何在散列计算中实现此种子?谢谢,命令运行良好。但它似乎不像java函数那样创建相同的密码设计,因为我不能使用生成的密码进行登录。