如何使用SHA-1
和base64
编码对字符串进行哈希处理?我有包openssl,我可以使用sha1
函数来创建一个字符串,但我不知道如何将sha-1
和base64
编码组合到我的字符串中。
出于测试目的,我的字符串是:
HY8&V5EDJO8NYT9C2011-12-13T00:44:02ZTest123
我需要SHA-1和base64编码输出:
nuoiyUX6m+irC5rvB4QUSycfHGc=
请有人可以提出建议吗?
答案 0 :(得分:0)
在使用openssl
包时,请使用以下函数
openssl::base64_encode(openssl::sha1(charToRaw("HY8&V5EDJO8NYT9C2011-12-13T00:44:02ZTest123")))
答案 1 :(得分:0)
openssl通常在一个文件上运行,基本上是字节流中的stdin。
我以printf的形式传递“HY8& V5EDJO8NYT9C2011-12-13T00:44:02ZTest123”,以非0字节的顺序(可能会或可能不会形成UTF-8或其他字符集中的有效字符) /编码)。
由于输入是从终端传递到键盘上的。终端将发送在其配置的字符集中编码的相应字符(如在密钥标签上所写)。
通常,在当前区域设置中设置。您可以使用命令“locale charmap”找到它。
我们必须确保输入首先被转发到UTF-8然后传递给openssl。我之所以使用icovn将字节转换为UTF-8中的相应编码。
所以下面的命令可用于在sha1中转换我们的字符串,然后使用openssl转换为base64。
printf %s "HY8&V5EDJO8NYT9C2011-12-13T00:44:02ZTest123" | iconv -t utf-8 | openssl dgst -sha1 -binary | openssl enc -base64
答案 2 :(得分:0)
$ echo nuoiyUX6m+irC5rvB4QUSycfHGc= | base64 -d | xxd -g 1
00000000: 9e ea 22 c9 45 fa 9b e8 ab 0b 9a ef 07 84 14 4b ..".E..........K
00000010: 27 1f 1c 67
和
$ echo -n "HY8&V5EDJO8NYT9C2011-12-13T00:44:02ZTest123" | openssl sha1
(stdin)= 9eea22c945fa9be8ab0b9aef0784144b271f1c67
和
$ cat test.c
#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>
int main()
{
unsigned char ibuf[] = "HY8&V5EDJO8NYT9C2011-12-13T00:44:02ZTest123";
unsigned char obuf[20];
SHA1(ibuf, strlen(ibuf), obuf);
int i;
for (i = 0; i < 20; i++) {
printf("%02x ", obuf[i]);
}
printf("\n");
return 0;
}
然后:
$ gcc -I /usr/local/include/ test.c /usr/local/lib/libcrypto.a -o test.exe
$ ./test.exe
9e ea 22 c9 45 fa 9b e8 ab 0b 9a ef 07 84 14 4b 27 1f 1c 67
答案 3 :(得分:0)
也许有点晚了,但试试
$ echo -n "HY8&V5EDJO8NYT9C2011-12-13T00:44:02ZTest123" | openssl dgst -binary -sha1 | openssl enc -base64
这将:
它会回复给你。