Расшифровать зашифрованную строку Java AES 128Bit, которая была зашифрована с использованием только ключа (без IV) в VB.NET - PullRequest
0 голосов
/ 14 октября 2010

Я пытаюсь найти код для использования в VB.NET для дешифрования строки, которая была зашифрована с использованием крипто-библиотеки Java.

Весь код, который я нашел до сих пор, использует Вектор Инициализации и Ключ для расшифровки, но строка была зашифрована с использованием только Ключа. (Использование вектора инициализации является необязательным шагом в Java).

Кто-нибудь знает код, который я могу использовать (желательно в VB.NET, но я мог бы конвертировать C #) для расшифровки 128-битной строки AES без вектора инициализации?

Большое спасибо

Steve

Ответы [ 2 ]

0 голосов
/ 07 декабря 2015

Вот исходный код для стороны Java.Расшифровка вызывается передачей строки:

  private static final byte[] __RawKey = {
   (byte) 0x30, (byte) 0x31, (byte) 0x32,
   (byte) 0x33, (byte) 0x34, (byte) 0x35,
   (byte) 0x36, (byte) 0x37
    };

   private String decrypt(String data) throws Exception {
   try {
     Key key = new SecretKeySpec(__RawKey, 0, __RawKey.length, "DES");
     byte[] _encrypted = data.getBytes();
     String sKey = new String(__RawKey);
     System.out.println(sKey);
     System.out.println(sKey.length());

     Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding", "SunJCE");                 
     cipher.init(Cipher.DECRYPT_MODE, key);
     byte[] _decrypted = cipher.doFinal(_encrypted);
     System.out.println("Decrypted: " + new String(_decrypted));
     return new String(_decrypted);
     }
     catch (Exception e) {
     System.out.println(e);
     return null;
     }
     }  
0 голосов
/ 14 октября 2010

Это синтаксис c #, но все классы должны быть одинаковыми для VB.net.Вам необходимо знать схему заполнения (если есть) и режим шифрования, используемый в процедурах шифрования.Справедливо поспорить, что если IV не используется, то он использует режим ECB.

Также важно обеспечить правильное кодирование при построении массивов байтов, содержащих ключи и зашифрованные данные.Это может быть ASCII, Unicode, UTF ...

using System.Security.Cryptography;
using System.IO;

byte[] encryptedBytes = new byte[16]; // multiple of 16 (blocksize is 128 bits)
byte[] keyBytes = new byte[16]; // if keysize is 128 bits

Rijndael rijndael = Rijndael.Create();
rijndael.Mode = CipherMode.ECB; // But try other modes
rijndael.Padding = PaddingMode.None; // But try other padding schemes
rijndael.BlockSize = 128;
rijndael.KeySize = 128;
rijndael.Key = keyBytes;
ICryptoTransform cryptoTransform = rijndael.CreateDecryptor();

MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, cryptoTransform, CryptoStreamMode.Write);

// Write the data to the stream to perform the decryption
cs.Write(encryptedBytes, 0, encryptedBytes.Length);

// Close the crypto stream to apply any padding.
cs.Close();

// Now get the decrypted data from the MemoryStream.
byte[] decryptedBytes = ms.ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...