Шифровать на C# и расшифровывать на Java с помощью одного и того же секретного ключа.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Шифровать на C# и расшифровывать на Java с помощью одного и того же секретного ключа.

Сообщение Anonymous »


Я готовлюсь выполнить шифрование на стороне сервера (C#) и расшифровку на стороне Android (Java) для моего ключа API. И шифрование/дешифрование в С# было в порядке. Кроме того, в Java и шифрование/дешифрование тоже в порядке. Основная проблема заключается в том, что зашифрованный текст в C# отличается от Java, хотя я использовал тот же секретный ключ. Зашифрованный текст, сгенерированный C#, не может быть расшифрован в Java. Я попробовал, как показано ниже.

На Java

public static String key = "aaaaaaabbccccbbbaaaaaaaabbccccbb"; частный статический байт [] key_Array = Base64.decode(key,Base64.DEFAULT); общедоступное статическое шифрование строки (String PlainText) { пытаться { Шифр шифра = Cipher.getInstance("AES/CBC/PKCS5PADDING"); // Вектор инициализации. // Это может быть любое значение или оно может быть сгенерировано с помощью генератора случайных чисел. байт[] iv = { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1, 7, 7, 7, 7 }; IvParameterSpec ivspec = новый IvParameterSpec(iv); Ключ secretKey = новый SecretKeySpec(key_Array, "AES"); cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivspec); return Base64.encodeToString(cipher.doFinal(plainText.getBytes()),Base64.DEFAULT); } поймать (Исключение e) { System.out.println("[Exception]:"+e.getMessage()); } вернуть ноль; } публичная статическая расшифровка строки (String EncryptedMessage) { пытаться { //Шифрование _Cipher = Cipher.getInstance("AES"); //Cipher _Cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); Cipher _Cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING"); // Вектор инициализации. // Это может быть любое значение или оно может быть сгенерировано с помощью генератора случайных чисел. байт[] iv = { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1, 7, 7, 7, 7 }; IvParameterSpec ivspec = новый IvParameterSpec(iv); Ключ SecretKey = новый SecretKeySpec (key_Array, «AES»); _Cipher.init(Cipher.DECRYPT_MODE, SecretKey, ivspec); байт decodedMessage[] = Base64.decode(encryptedMessage,Base64.DEFAULT); вернуть новую строку(_Cipher.doFinal(decodedMessage)); } поймать (Исключение e) { System.out.println("[Exception]:"+e.getMessage()); } вернуть ноль; } На C#

публичный класс Crypt { // Код C#, CipherMode.CBC // Версия CBC требует вектора инициализации IV. общедоступная статическая строка keyStr = "aaaaaaabbccccbbaaaaaaaabbccccbb"; // FFClY170hLrhsDnKUEhJ4FhVOnrpNNFFClY170hLrhsDnKUE общедоступная статическая строка Encrypt (строка PlainText) { RijndaelManaged aes = новый RijndaelManaged(); aes.BlockSize = 128; aes.KeySize = 256; // В Java оно равно /// Cipher _Cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING"); aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.PKCS7; byte[] keyArr = Convert.FromBase64String(keyStr); байт [] KeyArrBytes32Value = новый байт [32]; Array.Copy(keyArr, KeyArrBytes32Value, 24); // Вектор инициализации. // Это может быть любое значение или оно может быть сгенерировано с помощью генератора случайных чисел. byte[] ivArr = { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1, 7, 7, 7, 7 }; байт[] IVBytes16Value = новый байт[16]; Array.Copy(ivArr, IVBytes16Value, 16); aes.Key = KeyArrBytes32Value; aes.IV = IVBytes16Value; ICryptoTransform шифрование = aes.CreateEncryptor(); byte[] PlainTextByte = ASCIIEncoding.UTF8.GetBytes(PlainText); byte[] CipherText = encrypto.TransformFinalBlock(plainTextByte, 0, PlainTextByte.Length); return Convert.ToBase64String(CipherText); } общедоступная статическая строка Decrypt (строка CipherText) { RijndaelManaged aes = новый RijndaelManaged(); aes.BlockSize = 128; aes.KeySize = 256; aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.PKCS7; byte[] keyArr = Convert.FromBase64String(keyStr); байт [] KeyArrBytes32Value = новый байт [32]; Array.Copy(keyArr, KeyArrBytes32Value, 24); // Вектор инициализации. // Это может быть любое значение или оно может быть сгенерировано с помощью генератора случайных чисел. byte[] ivArr = { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1, 7, 7, 7, 7 }; байт[] IVBytes16Value = новый байт[16]; Array.Copy(ivArr, IVBytes16Value, 16); aes.Key = KeyArrBytes32Value; aes.IV = IVBytes16Value; ICryptoTransform decrypto = aes.CreateDecryptor(); byte[] EncryptedBytes = Convert.FromBase64CharArray(CipherText.ToCharArray(), 0, CipherText.Length); byte[] decryptedData = decrypto.TransformFinalBlock(encryptedBytes, 0, EncryptedBytes.Length); вернуть ASCIIEncoding.UTF8.GetString(decryptedData); } } Вывод Java

Обычный текст: хла хла

Текст шифра: MW6b3AIpNw5RLmhvAro1Yg==

Вывод C#

Обычный текст: хла хла

Зашифрованный текст: qsHRHy05GbRv5Q1QNOUlZQ==

Любые идеи или альтернативные способы будут оценены по достоинству. Спасибо.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Шифровать на C# и расшифровывать на Java с помощью одного и того же секретного ключа.
    Anonymous » » в форуме JAVA
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Шифровать на C# и расшифровывать на Java с помощью одного и того же секретного ключа.
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Как получить доступ к корзине s3 без секретного ключа и ключа доступа на Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Как проверить подпись Bitbucket Webhook с помощью секретного ключа?
    Anonymous » » в форуме Php
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как проверить подпись Bitbucket Webhook с помощью секретного ключа?
    Anonymous » » в форуме Php
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»