4

非対称暗号化アルゴリズムを使用してRubyで値を決定論的に暗号化する方法を誰かが知っているかどうか疑問に思いました。

ほとんどのユースケースでは、「A」を暗号化すると、復号化すると「A」が返されることだけが気になります。つまり、暗号化された値自体は気になりません。あなたは完全な往復だけを気にします。

ただし、私が開発しているアプリケーションの場合、出力を決定論的にする必要があります。つまり、変数のパディングなしでRSAを使用して何かを暗号化する必要があります。

OpenSSL::PKey::RSA::NO_PADDINGエラーのある値を暗号化しようとすると、次のように返されます。

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

RSAを使用して決定論的な暗号化された値を取得する方法について誰かが考えていますか?

よろしくお願いします、

DBA

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の2進数と見なされる場合)

于 2010-12-17T23:16:15.270 に答える