2009-05-28 2 views
2

원래 Borland C++로 작성되었으며 TurboPower LockBox 구성 요소에 구현 된 Blowfish 알고리즘을 사용하는 애플리케이션이 있습니다.TurboPower Blowfish를 .Net으로 이식하는 방법

이 응용 프로그램은 이제 C#으로 이식되었습니다. 현재이 알고리즘을 사용하는 Borland C++ dll을 호출합니다. 그러나 64 비트 OS에서 응용 프로그램을 실행할 때마다이 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); 

답변

2

TurboPower LockBox 데이터와 호환되지 않습니다.

C++ (32 비트)의 LockBox를 사용하여 디코딩하고 임시 파일/테이블로 출력하고 Blowfish.Net 및 C# (64 비트)을 사용하여 다시 인코딩함으로써 데이터 마이그레이션을 수행하는 유틸리티를 제공하는 것이 좋습니다.).

이 데이터 마이그레이션은 .NET 버전으로 업그레이드하기 전에 한 번 수행 한 다음 모두 호환됩니다.

형식을 변경했기 때문에 이진 파일/BLOB를 저장하여 형식을 변경하고 Base64 변환을 생략 할 수 있으며 여러 가지 암호화를 적용하거나 Blowfish를 다른 것으로 바꾸는 것과 같은 유용한 아이디어가 유용 할 수 있습니다.

+0

나는 그것이 내게 다가 왔다고 결론을 내 렸습니다. 나는 다른 대답을 원했습니다. 오 잘. 감사합니다. –