gpt4 book ai didi

bash 中的 Java 哈希函数

转载 作者:行者123 更新时间:2023-12-01 21:24:24 27 4
gpt4 key购买 nike

我正在尝试制作一个 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);
}

例如我尝试使用静态盐和 ssl 方法来创建密码哈希:

#!/bin/bash
salt='0c321e8669fce545'
passwordHash=$(echo -n 'hello' | openssl sha256)
finalPassword=$(echo $salt$passwordHash)

但我从来没有得到相同的结果。有什么办法可以实现这一点吗?

编辑:我的目标是创建一个密码,该密码被使用此 java 函数创建密码的平台所接受。

最佳答案

您需要使用-salt-pass参数。在 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 程序中看到的相匹配。重要的是,当您在 bashJava 中解密加密时,它应该会为您提供所需的信息。

为盐使用环境变量的原因是,任何潜伏使用 ps 命令监视正在执行的内容的人都不会看到传递给 openssl 的盐

64 位操作系统上,使用 openssl 时,用 -base64 替换 -a 参数

关于bash 中的 Java 哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58835947/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com