
这将生成一个短的8位数字哈希1817886a
OpenSSL有两种形式:
$ cd openssl-1.0.2-src$ grep -R X509_subject_name_hash *...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)...
在Java中生成X509Certificate的主题哈希…
这是他们的来源
crypto/x509/x509_cmp.c:
unsigned long X509_subject_name_hash(X509 *x){ return (X509_NAME_hash(x->cert_info->subject));}#ifndef OPENSSL_NO_MD5unsigned long X509_subject_name_hash_old(X509 *x){ return (X509_NAME_hash_old(x->cert_info->subject));}#endif最后:
unsigned long X509_NAME_hash(X509_NAME *x){ unsigned long ret = 0; unsigned char md[SHA_DIGEST_LENGTH]; i2d_X509_NAME(x, NULL); if (!EVP_Digest(x->canon_enc, x->canon_enclen, md, NULL, EVP_sha1(), NULL)) return 0; ret = (((unsigned long)md[0]) | ((unsigned long)md[1] << 8L) |((unsigned long)md[2] << 16L) | ((unsigned long)md[3] << 24L) ) & 0xffffffffL; return (ret);}#ifndef OPENSSL_NO_MD5unsigned long X509_NAME_hash_old(X509_NAME *x){ EVP_MD_CTX md_ctx; unsigned long ret = 0; unsigned char md[16]; i2d_X509_NAME(x, NULL); EVP_MD_CTX_init(&md_ctx); EVP_MD_CTX_set_flags(&md_ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); if (EVP_DigestInit_ex(&md_ctx, EVP_md5(), NULL) && EVP_DigestUpdate(&md_ctx, x->bytes->data, x->bytes->length) && EVP_DigestFinal_ex(&md_ctx, md, NULL)) ret = (((unsigned long)md[0]) | ((unsigned long)md[1] << 8L) | ((unsigned long)md[2] << 16L) | ((unsigned long)md[3] << 24L) ) & 0xffffffffL; EVP_MD_CTX_cleanup(&md_ctx); return (ret);}#endifi2d_X509_NAME
X509_NAME使用RFC
2459(及其他地方)将a编码为标准表示形式。例如,它用于证书主题和颁发者名称。
您可以使用类似的命令查看OpenSSL用于名称字符串的内容
openssl x509 -in <cert> -text-noout。它看起来类似于
C=US, ST=California, L=Mountain View, O=Google Inc,CN=www.google.com(取自Google证书)。
在Java中生成X509Certificate的主题哈希…
在大图中,您正在生成主题的专有名称字符串的哈希,并返回一个无符号的long。unsigned long实际上是一个截断的哈希。
X509_subject_name_hash使用SHA-1,并
X509_subject_name_hash_old使用MD5。
(评论)…他们如何使用sha1哈希生成该短哈希
OpenSSL提供了截断的哈希的十六进制编码。整个哈希在中
md。
md将为16个字节(MD5)或20个字节(SHA-1)。
截断与字节选择发生
[0,3]和对位 *** 作
md[0],
md[1],
md[2]和
md[3]。
8位数字来自对4个字节进行十六进制编码。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)