RSA-Verschlüsselung : verschieben von code aus js zu C#
Arbeite ich an einer useragent, dass Protokolle in teamcity und ich bin versucht zu bewegen, die Passwort-Verschlüsselung von js auf c#.
Abschnitt rsa.js und encrypt.js wichtig sind. Machen Sie einen Aufruf der Funktion mit
rsa.setPublic(publicKey,"10001");
Exponenten sieht wie sein eine hex-Zahl x10001 die 65537 base10 soweit ich sagen kann,
Hinweis: das unten genannte Konto gehört nicht teamcity demo-Website
Diesem test wird überprüft, ob der verschlüsselte text ist gleich der Klartext wird mit dem öffentlichen Schlüssel verschlüsselt.
[Test]
public void should_be_able_to_encode_a_string() {
string public_key = "00b46e5cd2f8671ebf2705fd9553137da082b2dd3dbfa06f254cdfeb260fb21bc2c37a882de2924d7dd4c61eb81368216dfea7df718488b000afe7120f3bbbe5b276ac7f2dd52bd28445a9be065bd19dab1f177e0acc035be4c6ccd623c1de7724356f9d6e0b703d01583ebc4467d8454a97928b5c6d0ba3f09f2f8131cc7095d9";
string expected = "1ae1d5b745776f72172b5753665f5df65fc4baec5dd4ea17d43e11d07f10425b3e3164b0c2ba611c72559dc2b00149f4ff5a9649b1d050ca6a5e2ec5d96b787212874ab5790922528a9d7523ab4fe3a002e8f3b66cab6e935ad900805cf1a98dc6fcb5293c7f808917fd9015ba3fea1d59e533f2bdd10471732cccd87eda71b1";
string data = "scott.cowan";
string actual = new EncryptionHelper().Encrypt(public_key, data);
Assert.AreEqual(expected,actual);
}
bisher die Umsetzung sieht aus wie
public string Encrypt(string public_key, string data)
{
rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(String.Format("<RSAKeyValue>{0}</RSAKeyValue>",public_key));
byte[] plainbytes = System.Text.Encoding.UTF8.GetBytes(data);
byte[] cipherbytes = rsa.Encrypt(plainbytes,false);
return Convert.ToBase64String(cipherbytes);
}
aber dieser beschwert sich mit
System.Security.Cryptography.CryptographicException
Message: Input string does not contain a valid encoding of the 'RSA' 'Modulus' parameter.
Danke jede Hilfe wird machen dies zu einem sehr frohe Weihnachten
Edit: sieht aus wie mein test ist fehlerhaft, da ein anderer encryptedPassword generiert mit jeder gesetzten Zeit
Antwort: ich drehte mich auf den Gast-Zugang, der umgeht dieses problem, aber ich würde noch gerne, es zu lösen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da die Verschlüsselung verwendet PKCS#1 random-Polsterung, die daraus resultierende "encryptedPassword" muss immer unterschiedlich sein.
Das Schlüsselwort hier ist "random padding" 😉
Du RSAKeyValue XML ungültig ist, das richtige format ist hier
http://www.w3.org/TR/xmldsig-core/#sec-RSAKeyValue
Ihre Funktion sollte wahrscheinlich so Aussehen (unter der Annahme, dass öffentlicher_schlüssel und exponent sind octet strings...)
In Ihrem Fall Ihr exponent ist 10001.
da in Ihrem Fall sieht es aus wie Sie nicht haben, octet strings
Ich hoffe, das hilft, habe ich noch nicht getestet es noch. ich werde, wenn ich nach Hause komme heute.