使用SHA-1和base64编码的哈希字符串

时间:2016-11-08 13:28:18

标签: r soap openssl base64 sha1

如何使用SHA-1base64编码对字符串进行哈希处理?我有包openssl,我可以使用sha1函数来创建一个字符串,但我不知道如何将sha-1base64编码组合到我的字符串中。

出于测试目的,我的字符串是:

HY8&V5EDJO8NYT9C2011-12-13T00:44:02ZTest123

我需要SHA-1和base64编码输出:

nuoiyUX6m+irC5rvB4QUSycfHGc=

请有人可以提出建议吗?

4 个答案:

答案 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

这将:

  1. 将字符串回显到管道
  2. openssl将使用SHA1算法消化字符串并将其管道化
  3. openssl将使用base64算法
  4. 将步骤2中生成的消化字符串编码为新字符串

    它会回复给你。

相关问题