散列RSA密钥的标准方法?

| 创建RSA公钥的哈希(sha-1或MD5)的算法是什么?有标准的方法吗?只是散列模数,两者都加字符串,然后取一个散列?通常使用SHA-1或MD5吗? 我想用它来确保我获得了正确的密钥(发送方发送了一个哈希,然后我自己计算了该哈希),并记录了该哈希,因此我始终知道在加密有效负载时使用了哪个确切密钥。     
已邀请:
        基于OpenSSH源代码,为RSA密钥生成指纹的方式是将n和e从公共密钥转换为大端二进制数据,将数据连接起来,然后使用给定的哈希函数对该数据进行哈希处理。 OpenSSH源代码的部分如下。添加了注释以澄清正在发生的事情。
// from key_fingerprint_raw() in key.c
switch (k->type) {
case KEY_RSA1:
    // figure out how long n and e will be in binary form
    nlen = BN_num_bytes(k->rsa->n);
    elen = BN_num_bytes(k->rsa->e);
    len = nlen + elen;
    // allocate space for n and e and copy the binary data into blob
    blob = xmalloc(len);
    BN_bn2bin(k->rsa->n, blob);
    BN_bn2bin(k->rsa->e, blob + nlen);

...

// pick a digest to use
switch (dgst_type) {
case SSH_FP_MD5:
    md = EVP_md5();
    break;
case SSH_FP_SHA1:
    md = EVP_sha1();
    break;

...

// hash the data in blob (n and e)
EVP_DigestInit(&ctx, md);
EVP_DigestUpdate(&ctx, blob, len);
EVP_DigestFinal(&ctx, retval, dgst_raw_length);
BN_bn2bin
手册页中:
BN_bn2bin(a, to)
a
的绝对值转换为大端序形式,并将其存储在
to
中。 “ 4”必须指向“ 6”个字节的内存。     

要回复问题请先登录注册