Я создал на своем MSSMS 12 следующее шифрование:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Password123';
CREATE CERTIFICATE Certificate1
WITH SUBJECT = 'Protect Data';
CREATE SYMMETRIC KEY SymmetricKey1
WITH ALGORITHM = AES_128
ENCRYPTION BY CERTIFICATE Certificate1;
UPDATE Customer_data
SET Credit_card_number_encrypt = EncryptByKey (Key_GUID('SymmetricKey1'),Credit_card_number)
Как мне расшифровать значение, поступающее из моей базы данных, которая является public byte[] Credit_card_number_encrypt, в строку?
Вот мой код попытки:
private string DecryptString(byte[] inputString)
{
MemoryStream memStream = null;
try
{
byte[] key = { };
byte[] IV = { 12, 21, 43, 17, 57, 35, 67, 27 };
string encryptKey = "Password123"; // MUST be 8 characters
key = Encoding.UTF8.GetBytes(encryptKey);
byte[] byteInput = new byte[inputString.Length];
byteInput = Convert.FromBase64String(inputString);
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
memStream = new MemoryStream();
ICryptoTransform transform = provider.CreateDecryptor(key, IV);
CryptoStream cryptoStream = new CryptoStream(memStream, transform, CryptoStreamMode.Write);
cryptoStream.Write(byteInput, 0, byteInput.Length);
cryptoStream.FlushFinalBlock();
Encoding encoding1 = Encoding.UTF8;
return encoding1.GetString(memStream.ToArray());
}
catch (Exception ex)
{
Console.Write(ex.Message);
return "";
}
}
Проблема в том, что Convert.FromBase64String(inputString) не может преобразовать тип данных byte[] в string. Как мне это сделать?
Да, это строка base64. Данные в базе уже зашифрованы
Возможный дубликат C# Преобразование Base64 -> byte []
Ответ Яхьи на дубликате должен решить вашу проблему. Как бы то ни было, вы не должны кодировать base64 массив byte[], а затем сохранять что как двоичные данные в своей базе данных. Вы должны сохранить исходный массив byte[]перед, он был закодирован как двоичный в вашей базе данных. В противном случае, какой смысл кодировать его в base64 - вы ничего не получите от этого, кроме того, что ваши данные будут занимать больше места на диске. Вся причина использования base64 заключается в кодировании любых двоичных данных в простом буквенно-цифровом (и +, /, =) формате, чтобы их можно было передавать в виде строки.





Почему inputString является байтовым массивом, а не строкой, как следует из названия? Это массив байтов, представляющий строку base64, или это просто необработанные незакодированные данные?