但实际上我的输出结果不同。有没有人知道我做错了什么?
以下是OpenSSL的使用方法...
$ cd openssl-1.0.2-src
$ grep -R X509_subject_name_hash *
apps/x509.c: BIO_printf(STDout, "%08lx\n", X509_subject_name_hash(x));
apps/x509.c: BIO_printf(STDout, "%08lx\n", X509_subject_name_hash_old(x));
crypto/x509/x509.h:unsigned long X509_subject_name_hash(X509 *x);
crypto/x509/x509.h:unsigned long X509_subject_name_hash_old(X509 *x);
crypto/x509/x509_cmp.c:unsigned long X509_subject_name_hash(X509 *x)
crypto/x509/x509_cmp.c:unsigned long X509_subject_name_hash_old(X509 *x)
...
接下来,看一下apps/x509.c
文件:
...
} else if (subject_hash == i) {
BIO_printf(STDout, "%08lx\n", X509_subject_name_hash(x));
}
...
你的声明应该是:
unsigned long hash = X509_subject_name_hash(cert)
然后:
fprintf(stdout, "%08lx\n", hash);
此外,OpenSSL在OpenSSL 1.0.1左右改变了计算主题哈希的方式。这就是为什么有X509_subject_name_hash
和X509_subject_name_hash_old
的原因。
如果您正在使用或与OpenSSL 0.9.8进行比较(例如Mac OS X 10),请参见Generate Subject Hash of X509Certificate in Java。虽然这是Java,但它详细说明了OpenSSL处理主题哈希的方法。
printf("0x%08lx",hash)
,无法理解将其序列化为 char * 的原因,这也是不正确的,因为缓冲区的大小应该取决于数字的位数。 - cmidi