[英]How do I base64 encode a SHA1() string in a C program
我想驗證C程序中的密碼。 密碼是使用sha1_base64()
Perl函數http://metacpan.org/pod/Digest::SHA1存儲的
我試圖使用openssl/sha.h
和b64.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);
當你有一個可以容納任何二進制數據的20個字符(160位)的靜態緩沖區時,不要使用strlen(obuf)
。 strlen
不會正確:如果您有8個對齊的位為0,它將中斷,並且如果緩沖區中沒有字節為零,則行為將不確定。 請改用sizeof(obuf)
。
好的,這似乎工作正常..我只用0填充字符串http://pastebin.com/LCvghszK
你能不能建議我是否可以優化base64_encode功能。 malloc和free的外觀相當混亂
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.