O çekebilir: Ben SHA_*
işlevlerini kullanın eğer SHA ("SHA-0") Python değer yaramış
int main(void) {
unsigned n = 1234;
unsigned char md[50];
SHA_CTX c;
SHA_Init(&c);
SHA_Update(&c, &n, 4);
SHA_Final(md, &c);
for (int i=0; i<20; i++) {
printf("%02x", md[i]);
}
printf("\n");
return 0;
}
3e491ac1d065d6d666e5e216e0cddf60fcb5be86
olsun Başvuru için
, yazdırma için onaltılık dönüştüren kodunuz. Çekirdeklerinden hiçbirinin 40 karakter uzunluğuna dikkat edin? Aşağıdaki to_hex() yöntemimi kullanmayı deneyin.
python ==> '7110eda4d09e062aa5e4a390b0a572ac0d2c0220'
string result: 7110eda4d09e62aa5e4a390b0a572acd2c220
integer result: c7f07b846cc46631c2079cdd7179afdd783d643
Ayrıca C sonuçlarınızı da üretemedim. İşte bir OSX sürümü:
#include <stdio.h>
#include <CommonCrypto/CommonDigest.h>
char *to_hex(unsigned char *buffer, size_t len) {
static char out[100];
char *p = out;
while (len--)
p += sprintf(p, "%02x", *buffer++);
*p = 0;
return out;
}
int main() {
unsigned char buffer[21] = { 0 };
printf("SHA1(\"1234\") = %s\n", to_hex(CC_SHA1("1234", 4, buffer), 20));
unsigned n = 1234;
printf("1234 LE = %s\n", to_hex(&n, 4));
printf("SHA1(1234 LE) = %s\n", to_hex(CC_SHA1(&n, 4, buffer), 20));
n = htonl(n);
printf("1234 BE = %s\n", to_hex(&n, 4));
printf("SHA1(1234 BE) = %s\n", to_hex(CC_SHA1(&n, 4, buffer), 20));
return 0;
}
ve burada dosya system/core/libmincrypt
içindedir Android sürümü
#include <stdio.h>
#include "mincrypt/sha.h"
char *to_hex(unsigned char *buffer, size_t len) {
static char out[100];
char *p = out;
while (len--)
p += sprintf(p, "%02x", *buffer++);
*p = 0;
return out;
}
int main() {
unsigned char buffer[21] = { 0 };
printf("SHA1(\"1234\") = %s\n", to_hex(SHA1_hash("1234", 4, buffer), 20));
unsigned n = 1234;
printf("1234 LE = %s\n", to_hex(&n, 4));
printf("SHA1(1234 LE) = %s\n", to_hex(SHA1_hash(&n, 4, buffer), 20));
n = htonl(n);
printf("1234 BE = %s\n", to_hex(&n, 4));
printf("SHA1(1234 BE) = %s\n", to_hex(SHA1_hash(&n, 4, buffer), 20));
return 0;
}
var ve her iki program aynı sonuçlar elde cc -I../include -o sha_test sha_test.c sha.c
ile derlenmiş
SHA1("1234") = 7110eda4d09e062aa5e4a390b0a572ac0d2c0220
1234 LE = d2040000
SHA1(1234 LE) = 7b08e025e311c3dfcf5179b67c0fdc08e73de261
1234 BE = 000004d2
SHA1(1234 BE) = ac9928e78cf6ea117451ecd6654fea2adae73e21
İpucu: 'map (ord," 1234 ") == [49, 50, 51, 52]! = [210, 4] == [1234 & 0xff, 1234 >> 8]' – kay
sha sha1 hakkında ne dersiniz?Güncelleştirme (str (1234)) '? – ycsun
Elbette, sha1.update (str (1234)) 'sha1.update ('1234')' ile aynıdır. –