C # кодирование в DES шифрование / дешифрование - PullRequest
3 голосов
/ 04 ноября 2010

Мой основной метод работает без ошибок, но расшифрованное сообщение неверно. Я почти уверен, что не правильно кодирую, но не могу решить проблему. Любая помощь будет принята с благодарностью.

Это мой первый пост, поэтому, если я случайно нарушил правило или не придерживался директивы, пожалуйста, дайте мне знать.

static void Main(string[] args)
{
    string unencryptedString = "cat";
    string encryptedString;
    string decryptedString;

    string password = "password";

    System.Console.WriteLine("Unencrypted String: " + unencryptedString);
    System.Console.WriteLine("Password: " + password);

    encryptedString = StandardEncryptor.Encrypt(unencryptedString, password);
    System.Console.WriteLine("Encrypted String: " + encryptedString);

    decryptedString = StandardEncryptor.Decrypt(encryptedString, password);
    System.Console.WriteLine("Decrypted String: " + decryptedString);

    System.Console.ReadLine();
}

public static string Encrypt(string message, string password)
{
    // Encode message and password
    byte[] messageBytes = ASCIIEncoding.ASCII.GetBytes(message);
    byte[] passwordBytes = ASCIIEncoding.ASCII.GetBytes(password);

    // Set encryption settings -- Use password for both key and init. vector
    DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
    ICryptoTransform transform = provider.CreateEncryptor(passwordBytes, passwordBytes);
    CryptoStreamMode mode = CryptoStreamMode.Write;

    // Set up streams and encrypt
    MemoryStream memStream = new MemoryStream();
    CryptoStream cryptoStream = new CryptoStream(memStream, transform, mode);
    cryptoStream.Write(messageBytes, 0, messageBytes.Length);
    cryptoStream.FlushFinalBlock();

    // Read the encrypted message from the memory stream
    byte[] encryptedMessageBytes = new byte[memStream.Length];
    memStream.Position = 0;
    memStream.Read(encryptedMessageBytes, 0, encryptedMessageBytes.Length);

    // Encode the encrypted message as base64 string
    string encryptedMessage = Convert.ToBase64String(encryptedMessageBytes);

    return encryptedMessage; 
}

public static string Decrypt(string encryptedMessage, string password)
{
    // Convert encrypted message and password to bytes
    byte[] encryptedMessageBytes = Convert.FromBase64String(encryptedMessage);
    byte[] passwordBytes = ASCIIEncoding.ASCII.GetBytes(password);

    // Set encryption settings -- Use password for both key and init. vector
    DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
    ICryptoTransform transform = provider.CreateDecryptor(passwordBytes, passwordBytes);
    CryptoStreamMode mode = CryptoStreamMode.Write;

    // Set up streams and decrypt
    MemoryStream memStream = new MemoryStream();
    CryptoStream cryptoStream = new CryptoStream(memStream, transform, mode);
    cryptoStream.Write(encryptedMessageBytes, 0, encryptedMessageBytes.Length);
    cryptoStream.FlushFinalBlock();

    // Read decrypted message from memory stream
    byte[] decryptedMessageBytes = new byte[memStream.Length];
    memStream.Position = 0;
    memStream.Read(decryptedMessageBytes, 0, decryptedMessageBytes.Length);

    // Encode deencrypted binary data to base64 string
    string message = Convert.ToBase64String(decryptedMessageBytes);

    return message;
}

Ответы [ 3 ]

3 голосов
/ 04 ноября 2010

Проблема со второй до последней строки?

string message = Convert.ToBase64String(decryptedMessageBytes);

Возможно, я не в курсе, но я не думаю, что вы намеревались преобразовать байты строки обратно в base64.Вам просто нужно преобразовать байты обратно в строку?

string message = ASCIIEncoding.ASCII.FromBytes(decryptedMessageBytes);
1 голос
/ 16 мая 2013

Я исправляю проблему, используя только это

//Encode deencrypted binary data to base64 string
string message = ASCIIEncoding.ASCII.GetString(decryptedMessageBytes);
1 голос
/ 04 ноября 2010

Похоже, проблема в расшифровке:

// Encode deencrypted binary data to base64 string
string message = Convert.ToBase64String(decryptedMessageBytes);

Не думаю, что вы хотите сделать это с расшифрованными данными. Дешифрованные байты уже являются ASCII.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...