Ich habe Probleme beim Öffnen einer Nacl SecretBox (in Java mit der TweetNaclFast-Bibliothek erzeugt) in C# mit der Bibliothek libsodium-net. Ich kann es auch nicht anders herum tun (öffne eine libsodium-net-generierte Box mit TweetNaclFast)."SecretBox" von TweetNacl (Java) kann nicht mit "Libsodium-net" (C#) geöffnet werden
Im folgenden Beispiel i eine SecretBox erstellen werden TweetNaclFast (Java) und versuchen, es zu öffnen mit libsodium-net (C#)
die SecretBox (Java) Erstellen
String secretMessage = "Hello Stack overflow!";
byte[] messageBytes = secretMessage.getBytes("UTF-8");
byte[] keyBytes = secureRandomGenerator(); //returns 32 random bytes (256 bits)
byte[] nonceBytes = TweetNaclFast.makeSecretBoxNonce();
byte[] boxBytes = new TweetNaclFast.SecretBox(keyBytes).box(messageBytes,nonceBytes);
System.out.println("Base64 box -> "+Base64.encodeBase64String(boxBytes));
System.out.println("Base64 key -> "+Base64.encodeBase64String(keyBytes));
System.out.println("Base64 nonce -> "+Base64.encodeBase64String(nonceBytes));
Creation Ausgabe
Base64 box -> iNEpgwFIo6nyaLNgMpSWqwTQ9Z5y/y+BUXszXVFZ2gP2A3XJ0Q==
Base64 key -> FKpCo/AhRRUjdQIpzMbZSnnzfBx1e/Ni9VZyNWYEB8E=
Base64 nonce -> 2qngWbMLFVNiPTFqTVO9nsraB8ACIrwV
die SecretBox Öffnungs (C#)
string box = "iNEpgwFIo6nyaLNgMpSWqwTQ9Z5y/y+BUXszXVFZ2gP2A3XJ0Q==";
string key = "FKpCo/AhRRUjdQIpzMbZSnnzfBx1e/Ni9VZyNWYEB8E=";
string nonce = "2qngWbMLFVNiPTFqTVO9nsraB8ACIrwV";
try
{
byte[] message = Sodium.SecretBox.Open(
Convert.FromBase64String(box),
Convert.FromBase64String(nonce),
Convert.FromBase64String(key));
Console.WriteLine(Encoding.UTF8.GetString(message));
}
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
}
öffnen Ausgang
Failed to open SecretBox
at Sodium.SecretBox.Open(Byte[] cipherText, Byte[] nonce, Byte[] key)
Jede Idee, über das, was ich falsch tun könnte?
EDIT
Ich denke, das Problem mit einer der Bibliotheken (libsodium-net höchstwahrscheinlich). Wenn ich eine SecretBox mit den gleichen Variablen erstelle ich eine andere Box bekommen ...
a Secret Box mit TweetNaclFast Erstellen
String message = "Hello Stack overflow!";
String key = "uCEgauAQDWGDkcclGe1rNV6V77xtizuemhgxzM5nqO4=";
String nonce = "+RTDstWX1Wps5/btQzSMHWBqHU9s6iqq";
SecretBox box = new SecretBox(Base64.decodeBase64(key));
byte[] cipherText = box.box(message.getBytes("UTF-8"), Base64.decodeBase64(nonce));
RÜCKKEHR: yDCt/kOLFUWPZpV3deVNUZaH0ZHLVmj9Nvm8QlbVKPe1a/INDw ==
Erstellen einer geheimen Box mit libnodium-net
string message = "Hello Stack overflow!";
string key = "uCEgauAQDWGDkcclGe1rNV6V77xtizuemhgxzM5nqO4=";
string nonce = "+RTDstWX1Wps5/btQzSMHWBqHU9s6iqq";
byte[] box = Sodium.SecretBox.Create(Encoding.UTF8.GetBytes(message),
Convert.FromBase64String(nonce),
Convert.FromBase64String(key));
Console.WriteLine(Convert.ToBase64String(box));
RÜCKKEHR: AAAAAAAAAAAAAAAAAAAAAMgwrf5DixVFj2aVd3XlTVGWh9GRy1Zo/Tb5vEJW1Sj3tWvyDQ8 =
Das ist genau das, was ich gefunden habe. Danke für die Erklärung :) – loveMeansNothing
Das ist eigentlich [eine Inkonsistenz in libsodium-net] (https://github.com/adamcaudill/libsodium-net/issues/133). Kompatible Funktionen [wurden hinzugefügt] (https://github.com/bitbeans/libsodium-net/commit/0d718a4c4d2d1f148a081864496fff7620245956). –
Sie rocken @Frank Denis – loveMeansNothing