Was ist das C # -Aquivalent von Java SecretKeySpec?

9

Ich habe folgenden Code in Java geschrieben

%Vor%

Ich möchte dasselbe Beispiel in C # machen. Also, ich schrieb folgenden Code

%Vor%

Die endgültigen Ergebnisse sind nicht gleich. secretKeyBArr und contentBArr sind Byte-Arrays und ihre Werte sind in beiden Beispielen identisch. Was unbekannt ist, ist SecretKeySpec an mac.init () übergeben. Also, was ist die gleiche Klasse in C #?

    
user1810618 11.12.2012, 22:09
quelle

2 Antworten

1

Die Ergebnisse sind identisch, aber Java verwendet vorzeichenbehaftete Bytes, während C # standardmäßig unsignierte Bytes verwendet.

Außerdem ändert SecretKeySpec selbst normalerweise nicht die zugrunde liegenden Daten. Sie müssen z.B. Setzen Sie eine DES-Schlüsselspezifikation in SecretKeyFactory , um sicherzustellen, dass die Paritätsbits korrekt gesetzt sind (in der resultierenden SecretKey ). Es gibt also keine Notwendigkeit für ein Äquivalent, da die Klasse selbst sehr wenig außer dem Einwickeln der Daten tut.

    
Maarten Bodewes 11.12.2012, 22:20
quelle
0

Ich implementiere eine Kreditkarten-Zahlungsmethode von einem Anbieter (Cardinity), der keine .net-Implementierung bietet. Ich bin auf der Suche nach ähnlichen Sachen und schreibe mein eigenes, weil meine Google-Fähigkeiten scheinen ....

Was ich brauche, ist die Base64-Zeichenfolge von javax.crypto.mac

Ich unterstütze die folgenden Methoden:

%Vor%

Ich habe den obigen Code, die SecretKeySpec und den Mac folgendermaßen implementiert (Sie benötigen System.Security.Cryptography.ProtectedData):

%Vor%

Ich habe dies folgendermaßen in einer OAuthSigner-Klasse implementiert:

%Vor%

Dann ist es nicht das, wonach Sie fragen, aber ich brauche eine Hilfsmethode, da ich meinen Text an einen Webservice sende, der so läuft und ich ihn einschließe, da einige den Code kopieren könnten:

%Vor%

Die Klasse UrlEncoder stammt aus System.Text.Encodings.Web, möglicherweise müssen Sie eine Referenz hinzufügen.

Die Klasse Cardinity implementiert eine "Abkürzung" für die Kodierung, die ich für Cardinity verwende

%Vor%

da Java string.GetBytes sehr oft verwendet, habe ich eine Erweiterungsmethode für diese Funktion hinzugefügt, die ich oben in key.GetBytes () anrufe, hier ist der Erweiterungscode:

%Vor%

Meine Testmethode, ich habe die Werte von Cardinity kopiert API wird ohne Probleme übergeben.

%Vor%

Die gesamte Implementierung des HmacOAuthSigner ist hier, es implementiert eine abstrakte Klasse mit der PercentEncode Methode darin.

%Vor%

und die abstrakte Klasse, die ich als Vertrag für alle Implementierungen verwende:

%Vor%     
Computer Trading 01.04.2018 19:56
quelle

Tags und Links