Помогите с шифрованием RSA - JAVA

315
28 марта 2018, 05:09

Пишу приложение-криптер на java для школьного проекта(можно сказать еще новичок), хочу реализовать алгоритм RSA, чтобы можно было через него передать "собеседнику" секретный ключ от AES. Вот соответсвенно код метода шифрования. pubKey и priKey уже реализованы и автоматически генерируются. На вход подаётся строка strOpenTextE и я хочу, чтобы можно было передать зашифрованное сообщение через любую соц.сеть мессенджер, для этого байтовый массив asString делаю из строки на кодировке Base64, но тут сразу появляется проблема. Base64.Decoder иногда не читает повторяющиеся буквы, или вообще добавляет свои байты из-за чего после расшифровки исходный текст искажается. Я не знаю, что делать. Другие кодировки дают непонятный набор символов, который даже не расшифровывается, а эта кодировка даёт строку латинских букв и символов, которые можно как раз передать собеседнику, как строку. Буду рад, если кто подскажет, как сделать, чтобы то исходный текст шифровался в строку, а затем расшифровывался без ошибок.

private static void Shifrated() throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, InvalidKeySpecException, IOException {
    cipher = Cipher.getInstance("RSA");
    if (mode == 1) {
        cipher.init(Cipher.ENCRYPT_MODE, pubKey);
        byte[] asString = new sun.misc.BASE64Decoder().decodeBuffer(strOpenTextE);
        byte[] bytes = cipher.doFinal(asString);
        strCipherE =  new sun.misc.BASE64Encoder().encode(bytes);

    } else if (mode == 2) {
        cipher.init(Cipher.DECRYPT_MODE, priKey);
        byte[] asString  = new sun.misc.BASE64Decoder().decodeBuffer(strCipherD);


        byte[] bytes1 = cipher.doFinal(asString);
        strOpenTextD =  new sun.misc.BASE64Encoder().encode(bytes1);;

       }

@FXML//код контроллера, который шифрует сообщение void useMethod(ActionEvent event){

    RsaCreate.setPublicKey(friendKey.getText()); //friendkey - TextField с публичным ключом
    RsaCreate.madePubKey();
    RsaCreate.setStrOpenTextE(yourKey.getText()); //yourKey - TextField с сообщением, которое надо зашифровать
    RsaCreate.setMode(1);
    RsaCreate.Start();
    getKey.setText(RsaCreate.getStrCipherE());
}

@FXML//код, который расшифровывает сообщение void mouse(Event event){

    if(!newFriendKey.getText().equals("")) {
        RsaCreate.setStrCipherD(newFriendKey.getText()); //newFriendKey - TexField с зашифрованной строкой
        RsaCreate.setMode(2);
        RsaCreate.Start();
            profileKey.setText(RsaCreate.getStrOpenTextD());
    }

Подскажите, что неправильно делаю (

Answer 1
byte[] bytes = cipher.doFinal(asString);
//javax.xml.bind.DatatypeConverter#printHexBinary
String encrypted = DatatypeConverter.printHexBinary(bytes);

И обратно:

byte[] dataBytes = DatatypeConverter.parseHexBinary(data);

UPD1

KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey priKey = keyGenerator.generateKey();
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, priKey);
byte[] bytes = cipher.doFinal("ddsss".getBytes(StandardCharsets.UTF_8));
String encrypted = DatatypeConverter.printHexBinary(bytes);
System.out.println(encrypted);
cipher.init(Cipher.DECRYPT_MODE, priKey);
byte[] bytes1 = cipher.doFinal(DatatypeConverter.parseHexBinary(encrypted));
System.out.println(new String(bytes1));
READ ALSO
Захват звука с (колонок) аудиовыхода

Захват звука с (колонок) аудиовыхода

Привет всем, нужна помощь с захватом звука с аудио выхода (если это вообще возможно средствами Java) Данный код работает, но захватывает звук...

265
mediaController.setPrevNextListeners

mediaController.setPrevNextListeners

Я хочу активировать следующий и предыдущий элементы управления на контроллере Android Media в приложении AndroidЯ старался, но все равно не добился

251
Проблемы с получением даныых в Firebase

Проблемы с получением даныых в Firebase

Выполняю поиск по своей базе данных в firebase, используя такой код:

250
Звуки в javaFX.

Звуки в javaFX.

Можно ли установить определенное время звучания?

303