4

我想知道是否有人知道使用非对称加密算法确定性地加密 Ruby 中的值的方法。

对于大多数用例,人们只关心加密“A”时会在解密时得到“A”,也就是说,您并不关心加密值本身。您只关心完整的往返行程。

但是,对于我正在开发的应用程序,我确实需要输出是确定性的。也就是说,我需要使用没有变量填充的 RSA 加密某些东西。

当我尝试加密带有OpenSSL::PKey::RSA::NO_PADDING错误的值时,返回:

OpenSSL::PKey::RSAError Exception: data too small for key size

任何人都知道如何使用 RSA 获得确定性加密值?

此致,

数据库管理员

4

2 回答 2

2

您可以使用非随机数据自己执行填充到适当的密钥长度

于 2010-12-17T23:25:47.823 回答
1

此错误来自crypto/rsa/rsa_none.c

int RSA_padding_add_none(unsigned char *to, int tlen,
    const unsigned char *from, int flen)
    {
    if (flen > tlen)
            {
            RSAerr(RSA_F_RSA_PADDING_ADD_NONE,RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE);
            return(0);
            }

    if (flen < tlen)
            {
            RSAerr(RSA_F_RSA_PADDING_ADD_NONE,RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE);
            return(0);
            }

    memcpy(to,from,(unsigned int)flen);
    return(1);
    }

rypto/rsa/rsa_eay.c 调用

static int RSA_eay_public_encrypt(int flen, const unsigned char *from,
         unsigned char *to, RSA *rsa, int padding)
...
               i=RSA_padding_add_none(buf,num,from,flen);

flen一条消息 len;并且tlen来自:num=BN_num_bytes(rsa->n);

因此,您需要您的数据具有与RSA 密钥参数相同的字节长度N

另外,据我所知,您的数据必须小于 N(如果将其视为单个 long-long-long 二进制数)

于 2010-12-17T23:16:15.270 回答