我想在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);

10-08 08:17