Frage

Ich habe eine Anwendung, die ursprünglich in Borland C ++ geschrieben wurde, und verwendet, um einen Blowfish-Algorithmus in der Komponente Turbopower LockBox umgesetzt.

Diese Anwendung wird nun auf C # portiert. Ich nenne derzeit eine Borland C ++ DLL, die diesen Algorithmus verwendet. Wenn jedoch die Anwendung auf einem 64-Bit-Betriebssystem ausgeführt wird, bekomme ich Fehler, wenn Sie versuchen, diese DLL zu verwenden. Wenn ich kompilieren die Anwendung als 32-bit, alles funktioniert, aber wir wollen diese Anwendung Arbeit als App 64-Bit haben. Soweit ich das beurteilen kann, das bedeutet, dass ich einen .Net Blowfish-Algorithmus benötigen, die wie die C ++ gearbeitet.

Ich fand Blowfish.Net und es sieht vielversprechend aus. Allerdings, wenn ich den gleichen Schlüssel und Text, um das verschlüsselte Ergebnis zu erzielen, stimmt nicht überein. Ich habe die C herauszufinden ++ DLL verwendet die BlowfishECB Algorithmus. Es wandelt auch das Ergebnis zu Base 64, die ich auch getan haben.

Jede Hilfe bei diesem würde geschätzt. Hier finden Sie einige Test-Code in C #.

//Convert the key to a byte array.  In C++ the key was 16 bytes long
byte[] _key = new byte[16];
Array.Clear(_key, 0, _key.Length);
var pwdBytes = System.Text.Encoding.Default.GetBytes(LicEncryptKey);
int max = Math.Min(16, pwdBytes.Length);
Array.Copy(pwdBytes, _key, max);

//Convert the string to a byte[] and pad it to to the 8 byte block size
var decrypted = System.Text.Encoding.ASCII.GetBytes(originalString);
var blowfish = new BlowfishECB();
blowfish.Initialize(_key, 0, _key.Length);
int arraySize = decrypted.Length;
int diff = arraySize%BlowfishECB.BLOCK_SIZE;
if (diff != 0)
{
    arraySize += (BlowfishECB.BLOCK_SIZE - diff);
}        
var decryptedBytes = new Byte[arraySize];
Array.Clear(decryptedBytes, 0, decryptedBytes.Length);            
Array.Copy(decrypted, decryptedBytes, decrypted.Length);    
//Prepare the byte array for the encrypted string
var encryptedBytes = new Byte[decryptedBytes.Length];
Array.Clear(encryptedBytes, 0, encryptedBytes.Length);
blowfish.Encrypt(decryptedBytes, 0, encryptedBytes, 0, decryptedBytes.Length);
//Convert to Base64
string result = Convert.ToBase64String(encryptedBytes);
War es hilfreich?

Lösung

Es wird nicht mit Turbopower LockBox Daten kompatibel.

Ich würde vorschlagen, dass Sie ein Dienstprogramm zur Verfügung stellen durch Dekodieren mit LockBox in C, um die Datenmigration zu tun ++ (32-Bit), die Ausgabe zu temporären Dateien / Tabellen und Re-Encoding mit Blowfish.Net und C # (64-Bit) .

Diese Datenmigration einmal vor jedem Upgrade auf die .NET-Version fertig ist, dann ist es kompatibel mit ihm.

Da Sie das Format sind zu ändern: Sie können auch das Format ändern und die Base64 Umwandlung auslassen durch das Speichern von Binärdateien / BLOBs können andere Ideen auch nützlich sein wie mehrere Verschlüsselungen Anwendung, oder Blowfish durch etwas zu ersetzen.

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