首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在.Net上移植TurboPower Blowfish

在.Net上移植TurboPower Blowfish
EN

Stack Overflow用户
提问于 2009-05-28 18:47:24
回答 1查看 574关注 0票数 2

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

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

我找到了Blowfish.Net,它看起来很有前途。但是,当我使用相同的密钥和文本时,加密的结果不匹配。我确实发现C++动态链接库使用了BlowfishECB算法。它还将结果转换为Base64,这也是我所做的。

这方面的任何帮助都将不胜感激。以下是C#中的一些测试代码。

代码语言:javascript
复制
//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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-05-28 21:05:41

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

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

在升级到.NET版本之前,只需完成一次数据迁移,即可与之兼容。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/922547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档