c - 我如何在 C 程序中对 SHA1() 字符串进行 base64 编码

标签 c base64 sha1

我想在 C 程序中验证密码。使用 sha1_base64() Perl 函数存储密码 http://metacpan.org/pod/Digest::SHA1

我正在尝试使用 openssl/sha.hb64.c 但密码不匹配。

我的 C 程序在这里 http://pastebin.com/CPC1vYAK

C代码输出:

[ram@darkstar c]$ ./sha1  password
W6ph5Mm5Pz8GgiULbPgzG37mj9j0z8Q=

还有 Perl 代码:

[ram@darkstar c]$ perl -MDigest::SHA -le 'print Digest::SHA::sha1_base64("password")'
W6ph5Mm5Pz8GgiULbPgzG37mj9g

最佳答案

在你的代码中你有一个

SHA1(argv[1], strlen(argv[1]), obuf);
base64_encode(obuf,strlen(obuf),b64,100);

strlen(obuf) 是错误的,因为 obuf 包含原始二进制数据,它没有空终止符,所以它会向 报告错误的长度base64_encode.

由于 SHA-1 生成 20 字节的摘要(与 obuf 一样大),您必须将此大小传递给 base64_encode:

base64_encode(obuf,20,b64,100);
/* or (may be better if you later decide to change hashing algorithm) */
base64_encode(obuf,sizeof(obuf),b64,100);

关于c - 我如何在 C 程序中对 SHA1() 字符串进行 base64 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8605714/

相关文章:

c++ - 操作数的求值顺序

c - 递归scanf死循环

javascript - 如何在javascript中对图像进行base64编码

java - 解码 Base 64 数据时出现垃圾字符

文件哈希 : Does it change for same content but in different order?

android - Flutter - 获取 SHA-1 证书 - Android Studio 3.2.1

c - 如何在c中显示结构变量的名称?

c++ - 减去无符号并得到有符号

java - Apache commons base64 解码和 Sun base64 解码

javascript - Python 和 JavaScript 中的哈希 sha1