Java - расшифровка сообщений с использованием закрытого ключа [дубликат]

Недавно мне пришлось центрировать «скрытый» div (т. е. display: none;), в котором была встроена форма, которая должна была быть сосредоточена на странице. Я написал следующий jQuery для отображения скрытого div & amp; затем обновите CSS до автоматической сгенерированной ширины таблицы и измените маржу, чтобы центрировать ее. (Переключатель отображения запускается щелчком по ссылке, но этот код не обязательно отображался.)

ПРИМЕЧАНИЕ. Я использую этот код, потому что Google привел меня к этому решению переполнения стека и amp; все будет работать, за исключением того, что скрытые элементы не имеют ширины и amp; не могут быть изменены / центрированы до тех пор, пока они не будут показаны.

$(function(){
  $('#inner').show().width($('#innerTable').width()).css('margin','0 auto');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="inner" style="display:none;">
  <form action="">
    <table id="innerTable">
      <tr><td>Name:</td><td><input type="text"></td></tr>
      <tr><td>Email:</td><td><input type="text"></td></tr>
      <tr><td>Email:</td><td><input type="submit"></td></tr>
    </table>
  </form>
</div>

7
задан HDJEMAI 5 June 2016 в 04:31
поделиться

2 ответа

Jozef прав.

Когда вы создаете шифр с параметрами по умолчанию, по умолчанию он имеет значение «RSA / ECB / PKCS1Padding». Вы должны явно указать заполнение, если вам не нравятся неприятные сюрпризы. Потому что другие поставщики безопасности могут иметь разные параметры по умолчанию. И вы никогда не знаете заранее, какие настройки безопасности имеют каждая конкретная JRE.

Таким образом, дополнение PKCS1 добавляет 11 байт к вашим исходным данным, увеличивая его с 117 байт до 128 байтов. Вы должны учитывать, что эти номера относятся к 1024-битным RSA-ключам (которые незначительно защищены) и будут отличаться для более длинных ключей. Поскольку вы загружаете ключ из файла, проверьте его длину.

@Test
public void testPadding() throws Exception {
    SecureRandom random = SecureRandom.getInstance("SHA1PRNG");

    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
    keyGen.initialize(1024, random);
    KeyPair keyPair = keyGen.generateKeyPair();

    /* constant 117 is a public key size - 11 */
    byte[] plaintext = new byte[117];
    random.nextBytes(plaintext);

    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
    byte[] ciphertext = cipher.doFinal(plaintext);
    System.out.println(plaintext.length + " becomes " + ciphertext.length);
}

Это выводит

117 becomes 128

И, наконец, рассмотрите возможность использования AES вместо RSA для шифрования файлов.

Итак, чтобы исправить проблему, вам необходимо использовать буфер размером с открытым ключом - 11 (117) для шифрования и размера открытого ключа (128) для дешифрования.

Изменить

outputFile.write(cipher.doFinal(buffer), 0, read);

-

outputFile.write(cipher.doFinal(buffer));

, поскольку чтение буфера составляет 117 байт, а размер doFinal - 128 байт.

Также вам необходимо буферизовать входные потоки. Когда вы читаете файл, это может быть медленным, а затем InputStream будет читать меньше данных, чем может содержать буфер. С помощью BufferedInputStream обеспечивается достаточное количество данных до того, как будет возвращен вызов чтения. Однако для дешифрования крайне важно иметь полный блок данных

InputStream inputEntry = new BufferedInputStream(originalZipFile.getInputStream(entry));
6
ответ дан divanov 26 August 2018 в 06:40
поделиться
while((read = inputEntry.read(buffer)) != -1){              
        outputFile.write(cipher.doFinal(buffer), 0, read);
    }

У вас здесь проблема. read - размер открытого текста, который был прочитан, а не зашифрованный текст. Вы должны полностью удалить 2-й и 3-й параметры.

Это также пустая трата времени и пространства для написания зашифрованного текста в промежуточном файле. Просто напишите это прямо в поток zip.

1
ответ дан user207421 26 August 2018 в 06:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: