当我在bitcoind服务器上调用getwork时,我得到以下内容:
./bitcoind getwork
{
"midstate" : "695d56ae173bbd0fd5f51d8f7753438b940b7cdd61eb62039036acd1af5e51e3",
"data" : "000000013d9dcbbc2d120137c5b1cb1da96bd45b249fd1014ae2c2b400001511000000009726fba001940ebb5c04adc4450bdc0c20b50db44951d9ca22fc5e75d51d501f4deec2711a1d932f00000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000",
"hash1" : "00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000010000",
"target" : "00000000000000000000000000000000000000000000002f931d000000000000"
}
Run Code Online (Sandbox Code Playgroud)
该协议似乎没有记录.如何根据此数据计算哈希值.我认为这些数据是小端的.那么第一步是将所有内容转换为大端?完成后,我计算数据的sha256.数据可以分为两个每个64字节的块.第一个卡盘的散列由中间状态给出,因此不必计算.
因此,我必须使用中间状态作为初始哈希值来使用sha256对chunck#2进行散列.一旦完成,我最终得到一个块2的哈希值,它是32字节.我再次计算此块的哈希值以获得最终哈希值.
然后,我将所有内容转换为小端并提交作品吗?
hash1用于什么?
我想用Java生成一个RSA-SHA256签名,但我不能让它在控制台上生成与OpenSSL相同的签名.
这就是我对OpenSSL所做的事情(遵循本教程):
生成密钥对:
openssl genrsa -out private.pem 1024
Run Code Online (Sandbox Code Playgroud)
提取公钥:
openssl rsa -in private.pem -out public.pem -outform PEM -pubout
Run Code Online (Sandbox Code Playgroud)
创建数据哈希:
echo 'data to sign' > data.txt
openssl dgst -sha256 < data.txt > hash
Run Code Online (Sandbox Code Playgroud)
生成的哈希文件以(stdin)=我手工删除的内容开头(首先忘了提及它,谢谢马塔).
签名哈希:
openssl rsautl -sign -inkey private.pem -keyform PEM -in hash > signature
Run Code Online (Sandbox Code Playgroud)
要在Java中重现结果,我首先将私钥从PEM转换为DER:
openssl pkcs8 -topk8 -inform PEM -outform DER -in private.pem -nocrypt > private.der
Run Code Online (Sandbox Code Playgroud)
现在我编写了这个Java类来生成相同的签名:
public class RSATest {
public static void main(String[] args) throws IOException,
NoSuchAlgorithmException, InvalidKeySpecException,
InvalidKeyException, SignatureException {
byte[] …Run Code Online (Sandbox Code Playgroud) 我想将访问者转发给第三方付费网站.第三方将使用sha256算法使用PHP的hash_hmac处理他们的付款和POST给我一个64个字符的令牌,该令牌来自一个唯一的订单号和共享密码,如下所示:
$token = hash_hmac("sha256", "12345", "sharedpassword");
Run Code Online (Sandbox Code Playgroud)
然后我想在我的端部使用相同的算法来生成(希望)相同的令牌以验证用户已付款.问题是我找不到一个等效的函数或方法来复制Python中的函数.我最接近的是Python的hashlib,但似乎没有一个函数可以接受2个参数 - 数据和共享密码.有没有人知道在这种情况下适用的hash_hmac等价物?
我们需要使用signtool.exe使用SHA1和SHA2双重签名我们的二进制文件,我们的证书支持256位SHA2.
使用Windows 8 SDK的signtool:
例如:
signtool.exe签名/ as/fd sha256/t http://timestamp.verisign.com/scripts/timstamp.dll/f"certificate.pfx"/ p XXXXXXX"file.dll"
(XXXXXXX是我们的证书密码)
因为神秘错误而失败:
SignTool错误:SignedCode :: Sign返回错误:0x80070057参数不正确.SignTool错误:尝试签名时发生错误:file.dll
在没有时间戳的情况下进行签名,单独签名为SHA1或SHA256可以正常工作,但是我们需要双重签名,并且想象没有时间戳是不行的.
我已经尝试了32位和64位版本的signtool.exe,在Win7和Win8机器上试过它,并尝试使用命令行选项,但无济于事.以前有人打过这个问题吗?
我已经在我的注册脚本中加密了密码,它们存储在数据库中,我必须使用它们登录,所以我想使用未加密的登录.我在这里读过一些帖子,但没有什么能帮到我.如何在login.php中添加它?盐也存储在数据库中.
这是我的register.php加密脚本
$hash = hash('sha256', $password1);
function createSalt()
{
$text = md5(uniqid(rand(), TRUE));
return substr($text, 0, 3);
}
$salt = createSalt();
$password = hash('sha256', $salt . $hash);
Run Code Online (Sandbox Code Playgroud)
这是我的login.php与季节
//Create query
$qry="SELECT * FROM member WHERE username='$username' AND password='$password'";
$result=mysql_query($qry);
//Check whether the query was successful or not
if($result) {
if(mysql_num_rows($result) > 0) {
//Login Successful
session_regenerate_id();
$member = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $member['id'];
$_SESSION['SESS_FIRST_NAME'] = $member['username'];
$_SESSION['SESS_LAST_NAME'] = $member['password'];
session_write_close();
header("location: profile.php");
exit();
}
else {
//Login failed
//error message
} …Run Code Online (Sandbox Code Playgroud) 这是md5哈希的3个示例
$ md5 -s "1" && md5 -s "2" && md5 -s "3"
MD5 ("1") = c4ca4238a0b923820dcc509a6f75849b
MD5 ("2") = c81e728d9d4c2f636f067f89cc14862c
MD5 ("3") = eccbc87e4b5ce2fe28308fd9f2a7baf3
Run Code Online (Sandbox Code Playgroud)
说我想从任何哈希中取8个字符.哈希的开头部分是否比结尾更"随机"?中间?或者所有子串都是"随机"的?
我正在寻找用Python编写的SHA-256哈希函数的实现.我想用它来更好地理解SHA-256函数的工作原理,我认为Python是理想的语言.伪代码有一个限制,我无法运行/测试它,看看我的代码修改对输出做了什么.
我需要一个如何使用Crypto ++从std :: string生成SHA256哈希并输出std :: string的示例.我似乎无法弄明白.我尝试的一切都给了我无效的输出.
这是interjay回答后的新代码:
string SHA256(string data)
{
byte const* pbData = (byte*) data.data();
unsigned int nDataLen = data.size();
byte abDigest[CryptoPP::SHA256::DIGESTSIZE];
CryptoPP::SHA256().CalculateDigest(abDigest, pbData, nDataLen);
return string((char*)abDigest);
}
Run Code Online (Sandbox Code Playgroud)
SHA256的输出("A"); 是

如何将其转换为可读格式?
感谢interjay的回答,我能够生成最终的哈希值.
我一直在寻找谷歌找到SHA256哈希的十六进制输出的样子.但我似乎无法找到它.
那么当SHA256哈希转换为十六进制时,它会是什么样子?
所以我想弄清楚如何在ios上做一个hmacshad256哈希,因为这是我为我所做的wcf服务api做的哈希.我一直在尝试寻找有关它的一些信息,但通常最终会得到一个SHA-256哈希.
这是我唯一的参考:
需要像Java一样在Objective C中生成HMAC SHA256哈希
而且我不确定这是否是唯一的方法(导入java hmac类)
任何帮助表示赞赏.
谢谢!