Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash中的Java散列函数_Java_Bash - Fatal编程技术网

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 {

我正在尝试制作一个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
   {
      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函数那样创建相同的密码设计,因为我不能使用生成的密码进行登录。