Frage

Ich frage mich, ob jemand eine Möglichkeit kennt deterministisch einen Wert in Ruby unter Verwendung eines asymmetrischen Verschlüsselungsalgorithmus verschlüsselt werden.

Für die meisten Anwendungsfälle eine nur Sorgen, dass, wenn Sie ‚A‘ verschlüsseln Sie bekommen ‚A‘ zurück, wenn Sie es zu entschlüsseln, die Sie nicht über den verschlüsselten Wert selbst ist es egal. Sie nur über die volle Rundfahrt sorgen.

Doch für eine Anwendung, die ich entwickle ich brauche wirklich die Ausgabe deterministisch zu sein. Das heißt, ich muss etwas verschlüsseln mit RSA ohne variable Polsterung.

Wenn ich versuche, einen Wert zu verschlüsseln mit OpenSSL::PKey::RSA::NO_PADDING ein Fehler zurückgegeben:

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

Wer hat eine Idee, wie ich einen determinis verschlüsselten Wert mit RSA bekommen kann?

Mit freundlichen Grüßen,

DBA

War es hilfreich?

Lösung

Dieser Fehler kommt von 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);
    }

Wird von 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);

Die flen ist eine Nachricht len; und die tlen ist aus: num=BN_num_bytes(rsa->n);

So Sie müssen Ihre Daten das gleiche Byte Länge als Ihr N Parameter von RSA-Schlüssel haben

Auch ich weiß, Ihre Daten muss kleiner sein als N (wenn betrachtet als Einzel lang-lang-lang binäre Zahl)

Andere Tipps

Sie könnten die Polsterung an den entsprechenden Schlüssellänge, sich mit nicht-zufälligen Daten

ausführen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top