Итак, что мне нужно, это следующее:RSA Шифрование и дешифрование с X509Certificate2
- Создать certifiactes для развития, получить один для клиента и один для сервера
- Получить пароль через API, закодированный от клиента и расшифровать его на сервере
Теперь мне удалось создать сертификаты после this link. Девочка дала пошаговые инструкции о том, как получить самоподписанные сертификаты, поместить их в магазин и т. Д. Теперь у меня возникла проблема с:
Мне удалось зашифровать мои данные, используя эту код:
public static string Encrypt(string stringForEncription, string PathToPrivateKey)
{
X509Certificate2 myCertificate;
try
{
myCertificate = new X509Certificate2(PathToPrivateKey, "Test123");
}
catch (Exception e)
{
throw new CryptographicException("Unable to open key file.");
}
RSACryptoServiceProvider rsaObj;
if (myCertificate.HasPrivateKey)
{
rsaObj = (RSACryptoServiceProvider)myCertificate.PrivateKey;
}
else
throw new CryptographicException("Private key not contained within certificate.");
if (rsaObj == null)
return String.Empty;
byte[] decryptedBytes;
byte[] array = Encoding.UTF8.GetBytes(stringForEncription);
try
{
decryptedBytes = rsaObj.Encrypt(array, false);
//decryptedBytes = rsaObj.Encrypt(Convert.FromBase64String(Base64EncryptedData), false);
}
catch (Exception e)
{
throw new CryptographicException("Unable to encrypt data.");
}
// Check to make sure we decrpyted the string
if (decryptedBytes.Length == 0)
return String.Empty;
else
return System.Text.Encoding.UTF8.GetString(decryptedBytes);
}
Для переменного ключа PathToPrivate Я использую путь к моему клиенту ClientCert.pfx. Я не знаю, если я должен использовать любой другой, но вот оснастки папки со всеми сертификатами, которые я сделал:
Теперь, для расшифровки, я использую следующий код:
public static string DecryptEncryptedData(string Base64EncryptedData, string PathToPrivateKey)
{
X509Certificate2 myCertificate;
try
{
myCertificate = new X509Certificate2(PathToPrivateKey, "Test123");
}
catch (Exception e)
{
throw new CryptographicException("Unable to open key file.");
}
RSACryptoServiceProvider rsaObj;
if (myCertificate.HasPrivateKey)
{
rsaObj = (RSACryptoServiceProvider)myCertificate.PrivateKey;
}
else
throw new CryptographicException("Private key not contained within certificate.");
if (rsaObj == null)
return String.Empty;
byte[] decryptedBytes;
try
{
decryptedBytes = rsaObj.Decrypt(Convert.FromBase64String(Base64EncryptedData), false);
}
catch (Exception e)
{
throw new CryptographicException("Unable to decrypt data.");
}
// Check to make sure we decrpyted the string
if (decryptedBytes.Length == 0)
return String.Empty;
else
return System.Text.Encoding.UTF8.GetString(decryptedBytes);
}
И все, что я пытаюсь сделать, это дает мне исключение:
{"The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters. "}
бы действительно apreciate кто-то помогает мне.
@KayLee Пробовал, что не работает, сертификаты в порядке, ключи есть, я думаю, что проблема заключается в преобразовании в Base64String и из Base64String –
Попробуйте протестировать DecryptEncryptedData («hello», string PathToPrivateKey); Возможно, такое же сообщение об исключении будет показано в моем опыте. Это означает, что аргумент неправильно отформатирован (неправильно зашифрован). Надеюсь, это дает некоторую подсказку. Я уверен, что все это касается формата в виде байта, base64string, decryptedplainstring. Проанализируйте примерный блог, как MSDN, и это не сложно. –
Я вернусь завтра утром после просмотра моего кода. Вот поздняя ночь. –