Я хочу выполнить процесс шифрования для своего приложения в соответствии со списком ниже: 1- Сначала я хочу зашифровать свою простую строку с помощью алгоритма sha256. 2- секунда Я хочу подписать зашифрованный текст с помощью закрытого ключа, который у меня есть 3- В-третьих, я хочу преобразовать полученный массив байтов в base64 для передачи в качестве заголовка в моем запросе API.
ниже мой код, который не создает правильную строку со знаком:
byte[] signedBytes, originalData;
string temp_inBase64;
using (SHA256 hash = SHA256Managed.Create())
{
Encoding enc = Encoding.UTF8;
originalData = hash.ComputeHash(enc.GetBytes(message));
}
using (var rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString("xxxxxx"); //Final
try
{
signedBytes = rsa.SignData(originalData, new SHA256CryptoServiceProvider());
temp_inBase64 = Convert.ToBase64String(signedBytes);
}
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
return null;
}
finally
{
rsa.PersistKeyInCsp = false;
}
}
return temp_inBase64;
исходные данные - это мое сообщение, которое я передал нашей функции, Но проверенный результат не правильный,
Может кто-нибудь мне помочь?
Отвечает ли это на ваш вопрос? Кодировка Base64 строки SHA256





Я думаю, вы неправильно понимаете, что такое хеш - эта часть не является шифрованием. Хэш — это способ вычислить «отпечаток пальца» для блока данных. Изменение любого байта данных (даже незначительного) полностью изменит «отпечаток пальца». Сам процесс подписи rsa вычисляет хэш ваших данных и подписывает хэш. Это позволяет получателю гарантировать, что данные не были подделаны (они могут вычислить хэш и убедиться, что он совпадает), и что они были отправлены вами (хеш зашифрован вашим ключом).
Таким образом, вместо того, чтобы самостоятельно вычислять хэш и передавать его в функцию подписи RSA, вам нужно передать свои данные для подписи и убедиться, что функция подписи настроена на использование SHA256.
Алгоритм процесса подписи верен, но если результирующая строка не работает Я предложил вам попробовать эту функцию для хэширования sha256 и после этого подписать массив байтов, преобразованный в базу 64 с закрытым ключом,
ниже приведен пример кода для вашего запроса:
// Generate a new RSA key pair
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
// Get the private key
rsa.FromXmlString("xxxxx"); //Final ;
// The string to sign
string originalString = message;
// Sign the string
byte[] signedData = rsa.SignData(System.Text.Encoding.UTF8.GetBytes(originalString), CryptoConfig.MapNameToOID("SHA256"));
// Verify the signature
bool signatureVerified = rsa.VerifyData(System.Text.Encoding.UTF8.GetBytes(originalString), CryptoConfig.MapNameToOID("SHA256"), signedData);
var temp_inBase64 = Convert.ToBase64String(signedData);
как вы можете видеть в конце кода, я возвращаю подписанные данные в формате base 64 и не использую проверенные подписанные данные, Полученное сообщение сработало для меня но вы можете проверить проверенные данные знака,
с наилучшими пожеланиями
Пожалуйста, не могли бы вы применить нормальный отступ к вашему коду? На данный момент очень тяжело читать. Также было бы очень полезно, если бы вы могли предоставить образцы данных, в том числе, откуда вы получаете ожидания. (Кроме того, я думаю, что код был бы понятнее, если бы вы просто возвращали значение сразу после его вычисления, а не сохраняли его в локальной переменной. Я не вижу
temp_inBase64как добавление какого-либо значения.)