SHA1 不匹配打开
SHA1 Mismatches openssl
我是一名将C应用程序移植到Java的Java开发人员。我不是 c 开发人员,所以仅此一项就是一个挑战。部分软件使用 openssl 创建 SHA1。我无法在 C 和 Java 之间实现匹配的 SHA 哈希。事实上,在将实现提炼为几行代码,然后在 ubuntu 上针对 openssl 测试它们之后,所有 3 个都为同一字符串生成不同的哈希。
我已经为此工作了几个小时,我快要失去理智了。C 和 Java 实现如下。拜托,如果你看到我做错了什么,请指出来。
更新:我已经能够通过添加 -n 来匹配 openssl cmd 回显。显然,它会自动添加行尾。不过,我仍然坚持通过 C 使用它。
.JAVA
System.out.println(
org.apache.commons.codec.digest.DigestUtils.sha1Hex("symphony")
);
HASH: 1c882ecb4c9e6cf19a4ff207c7dbf8a250567fbf <- CORRECT SHA1
C++
uint32_t sha1_hash[5];
unsigned char data[] = "symphony";
SHA1(data, 8, (uint8_t *)sha1_hash);
cout << "SYMPHONY " << hex << sha1_hash[0] << sha1_hash[1] << sha1_hash[2] << sha1_hash[3] << sha1_hash[4]<< dec << endl;
HASH: e8b8a894e4f0b00c3b9f69ecfe81c1f0a3d43817
openssl cmd on ubuntu
echo symphony | openssl dgst -sha1
HASH: 4b2c22b662de79e609295798f6fc5cb5f7676fa6
openssl cmd on ubuntu
echo -n symphony | openssl dgst -sha1
HASH: 1c882ecb4c9e6cf19a4ff207c7dbf8a250567fbf
uint32_t sha1_hash[5]
将其更改为uint8_t my_hash[20]
并使用以下方法打印:
#include <iostream>
#include <iomanip>
...
uint8_t my_hash[20];
SHA1(data, length, my_hash);
cout << hex;
for(int i = 0; i < 20; i++)
{
cout << setfill('0') << setw(2) << (my_hash[i] & 0xFF) << " ";
}
length
大概在哪里strlen("symphony")
相关文章:
- Qt SQLite没有查询或参数计数不匹配
- 模板参数推导失败,函数参数/参数不匹配
- 在使用累加时,C++中的运算符+不匹配
- C++ 与操作员不匹配<<
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 与'operator='不匹配(操作数类型'String'且"void")
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- C4018:类内有符号、无符号不匹配
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 为什么我收到错误:"运算符<<不匹配?
- RE2 不匹配非 ASCII 字符
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 模板推导:为什么函数指针模板定义在常量和/或引用时不匹配?
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- OpenSSL fips in C++ wrapper Library 如何?错误:指纹不匹配
- 为什么我的数组值与此处的全局变量不匹配?
- 引号之间匹配/不匹配,带有不可避免的引号和多行
- 映射迭代器与运算符不匹配
- C++调用和定义不匹配
- SHA1 不匹配打开