【问题标题】:Porting TurboPower Blowfish to .Net将 TurboPower Blowfish 移植到 .Net
【发布时间】:2009-05-28 18:47:24
【问题描述】:

我有一个最初用 Borland C++ 编写的应用程序,并使用了在 TurboPower LockBox 组件中实现的 Blowfish 算法。

此应用程序现已移植到 C#。目前我调用了一个使用该算法的 Borland C++ dll。但是,在 64 位操作系统上运行应用程序时,每当尝试使用此 dll 时都会出错。如果我将应用程序编译为 32 位,一切正常,但我们希望让此应用程序作为 64 位应用程序工作。据我所知,这意味着我需要一个像 C++ 一样工作的 .Net Blowfish 算法。

我找到了 Blowfish.Net,它看起来很有希望。但是,当我使用相同的密钥和文本时,加密的结果不匹配。我确实发现 C++ dll 使用 BlowfishECB 算法。它还将结果转换为 Base 64,我也这样做了。

对此的任何帮助将不胜感激。这是 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);

【问题讨论】:

    标签: blowfish turbopower


    【解决方案1】:

    它与您的 TurboPower LockBox 数据不兼容。

    我建议您提供一个实用程序来执行数据迁移,方法是使用 C++(32 位)中的 LockBox 进行解码、输出到临时文件/表并使用 Blowfish.Net 和 C#(64 位)重新编码.

    此数据迁移在任何升级到 .NET 版本之前完成一次,然后全部兼容。

    由于您要更改格式:您还可以更改格式并通过存储二进制文件/BLOB 来省略 Base64 转换,其他想法也可能有用,例如应用多重加密,或用其他东西替换 Blowfish。

    【讨论】:

    • 这是我自己得出的结论,我只是希望得到不同的答案。那好吧。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    相关资源
    最近更新 更多