2014-11-07 2 views
0

Я кодирую алгоритм RSA для шифрования строки для отправки в веб-службу VisualBasic. К сожалению, VB RSAcryptoserviceprovider всегда дает мне исключение «Плохие данные», и это проблема в кодировке. Код VisualBasic получает строку и преобразует ее в массив байтов, используя кодировку Windows-1252, и их расшифровывает.Неверные символы Java Windows-1252

В моем Java коде, я шифрование с помощью этого:

private static String encryptBlock(Cipher cipher, String textToEncrypt) { 
    cipher.init(Cipher.ENCRYPT_MODE, pubKey); 
    String encrypted = new String(cipher.doFinal(textToEncrypt.getBytes(Charset.defaultCharset())), "windows-1252"); 
    return encrypted; 
} 

Когда я «System.out.print» зашифрованной строки она дает мне странные символам нравятся. Означает ли это, что кодировка windows-1252 неверна? Что я здесь делаю неправильно? Обратите внимание, что я могу вносить изменения только в код Java, а не в VB.

Спасибо!

+0

Я не верю, что Windows-1252 содержит символ , вероятно, он кодируется в UTF-8 или UTF-16. – JonK

+0

«новая строка (cipher.doFinal (textToEncrypt.getBytes (Charset.defaultCharset())),« windows-1252 »); если я напечатаю это, он даст мне некоторые символы – DiogoPinheiro

+0

. Задайте другой набор символов и посмотрите, изменяется ли выход. – JonK

ответ

2

Вам необходимо преобразовать шифрованный текст в кодировку base 64 и вернуться к байтам перед расшифровкой. Либо это, либо вам нужно продолжать рассматривать шифрованный текст как двоичный.

Нет кодировок символов, которые будут использовать каждое возможное случайное значение байта в качестве печатаемого символа. Поэтому использование только кодировки по умолчанию, как и сейчас, приведет к потере данных.

Когда данные потеряны, вы получите исключение, указывающее, что размер зашифрованного текста неверен или что прокладка, используемая в шифровании RSA, недействительна.

+0

Но код VisualBasic ожидает строку с 128 символами и кодировкой windows-1252. И эта база 64 возвращает длину 172 символов. – DiogoPinheiro

+0

Вы либо убедитесь, что эти символы напрямую сопоставлены с байтами, либо вы исправляете код VB. Об этом нет. –

+0

Как ввести строку VB? –

 Смежные вопросы

  • Нет связанных вопросов^_^