簡體   English   中英

如何在C程序中對SHA1()字符串進行base64編碼

[英]How do I base64 encode a SHA1() string in a C program

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

當你有一個可以容納任何二進制數據的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM