簡體   English   中英

使用最初在Foxpro中加密的C#解密字符串

[英]Decrypt a string with C# that was originally encrypted in Foxpro

我正在編寫一個.Net MVC程序,該程序必須能夠讀取Foxpro應用程序加密的字符串。 如果我從一開始就進行加密和解密,那沒問題。 我不知道foxpro的Encrpyt和Decrypt方法在做什么,以了解如何在C#中應用相同的加密和解密方法。

這是foxpro中對Encrypt的調用。

encyptedString = ENCRYPT(saltString + unencryptedString, secretkey_aes256,2,0)

這是foxpro中對Decrypt的調用(第二行刪除了鹽)

unencryptedString = DECRYPT(encryptedString, secretkey_aes256,2,0)
unencryptedString = SUBSTR(unencryptedString, LEN(saltString) + 1)

我顯然知道saltString和secretkey_aes256的值,是的aes256是一個線索,但是我不知道參數2和0在做什么。

以為有人會從解決這個難題中解脫出來,也許對他們來說這甚至不是難題。 我已經研究了幾個小時,但到目前為止我對加密和解密還不夠了解。

任何幫助表示贊賞。

編輯:

如果2表示AES256,0表示ECB,則有關我在以下代碼中做錯了什么的任何線索?

public string DecryptString(string encrypted)
        {
            RijndaelManaged myAES = new RijndaelManaged();
            myAES.KeySize = 256;
            myAES.BlockSize = 256;
            myAES.Mode = CipherMode.ECB;
            myAES.Padding = PaddingMode.None;

            byte[] _key = ASCIIEncoding.UTF8.GetBytes(_secret);

            myAES.Key = _key;

            byte[] encrypted_bytes = ASCIIEncoding.UTF8.GetBytes(@encrypted.Trim());

            ICryptoTransform decrypto = myAES.CreateDecryptor();

            string decrypted = "";

            decrypted = ASCIIEncoding.UTF8.GetString(decrypto.TransformFinalBlock(encrypted_bytes, 0, encrypted.Trim().Length));

            return decrypted;
        }

VFP沒有內置的加密和解密功能,因此編寫代碼的人都使用了第三方產品。 克里斯·迪弗(Chris Diver)可能是正確的,因為那是克雷格·博伊德(Craig Boyd)的VFPEncryption.FLL。 這是該庫的最新文檔: http : //www.sweetpotatosoftware.com/spsblog/2009/08/09/MajorVFPEncryptionUpdate.aspx

由於沒有足夠的信息,您將需要進行一些實驗以找到正確的BlockSize (256位?)和IV ,我認為它們都設置為0x00。

對於解密本身就可以使用RijndaelManagedKeySize設置為256位和Mode設置為ECB -一個很好的起點是http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged.aspx

AES256的塊大小為128位,密鑰大小為256位。 因此,您需要將RijndaelManaged實例的塊大小設置為128, 而不是 256。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM