Делаю не большую библиотеку RSA для себя на джаве. У меня есть 2 метода "byteToString" и "stringToByte", это нужно что-бы передать байты в строки. Но я столкнулся с ошибкой когда со строки переделываю в байты.
public static byte[] stringToByte(String str) {
return Base64.getDecoder().decode(str);
}
public static String byteToString(byte[] b) {
return Base64.getEncoder().encodeToString(b);
}
public static void main(String[] args) {
String text = "Hello";
System.out.println(KeyUtils.stringToByte(text));
}
Я использую стандартную библиотеку Base64(ISO_8859_1)
Но также я пытался сделать вот так:
public static byte[] stringToByte(String str) {
return str.getBytes(StandardCharsets.UTF_8);
}
public static String byteToString(byte[] b) {
return new String(b, StandardCharsets.UTF_8);
}
public static void main(String[] args) {
String text = "Hello";
System.out.println(KeyUtils.stringToByte(text));
}
На мае удивления здесь нет ошибки.
НО самая проблема в том, что когда я хочу зашифрование байты с помощи РСА переделать в строку. У меня получается это.
NàƒSûšêõ%á1+á®(÷õü‡5XUà:£•¹µú=*azë÷æ^‹R¬Ï"êÿo•9"‡D¢F’Eñe«£Î¹
mÆûäx´GÒ»å~‡R@”Ië=éCâùò2(î·ÄË>µZ¹Ý8:1-½b*µÙõѾÞþ2òq¡¸TÞ.±¹ÐI±Ø²µw£Z‡Ü;ŽIŽ/ìG‹nËg+IÛ>ÉZr…z#[ã|Ô
А хотелось бы увидеть такое
K/XUn9wYvKKehQBiV370cXXF44TM8UoGI+tWbW22koOqHOIzYEB71wAP2jiYuC0x0O08I20HNt+wdFZKdUNXaeDSIxWivrKUZMRS9nglY2d+hBGw+mBW2QVwk93crq5TtOZxZb2SsL26FH5f/SBs8q3eFCC9F7OMCpJRWPaH1E4=
Что посоветуете?
Вы пытаетесь декодировать "Hello" из base64, но эта строка не является base64-encoded строкой.
Функция | Вход | Выход
________|__________|________
decode | SGVsbG8= | Hello
encode | Hello | SGVsbG8=
decode | Hellow== | �e� (0x1de965a3)
Давайте попробуем вручную закодировать и раскодировать 'Hello' в/из Base64:
'Hello'
'H' 0100 1000
'e' 0110 0101
'l' 0110 1100
'l' 0110 1100
'o' 0110 1111
Encode:
[A-Za-z0-9+/]
00 0100 10 S
00 00 0110 G
00 0101 01 V
00 10 1100 s
00 0110 11 b
00 00 0110 G
00 1111 .. 8= ("=" — признак нехватки 2х бит,
если бы тут не хватало 4х бит, мы бы добавили "==")
Decode:
[A-Za-z0-9+/]
'H' 00 0001 11
'e' 00 01 1110
'l' 00 1001 01
'l' 00 10 0101
'o' 00 1010 00
0001 1101 0x1D
1110 1001 0xE9
0110 0101 0x65
1010 00?? 0xA? <- Проблема (Last unit does not have enough valid bits)
(На последний блок не хватило бит)
Следующий вызов должен работать корректно:
System.out.println(new String(stringToByte(byteToString("Hello".getBytes()))));
import java.util.Base64;
public class Main
{
public static String encode(byte[] bytes) {
return Base64.getEncoder().encodeToString(bytes);
}
public static String encodeWithoutPadding(byte[] bytes) {
return Base64.getEncoder()
.withoutPadding()
.encodeToString(bytes);
}
public static byte[] decode(String s) {
return Base64.getDecoder().decode(s);
}
public static void main(String[] args) {
String s = "Hello, World!";
String encoded = encodeWithoutPadding(s.getBytes());
String decoded = new String(decode(encoded));
System.out.println(encoded);
System.out.println(decoded);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Не могу понять нюанс работы с RoomДобавление в базу данных связанных через внешний ключ записей получается только так:
Web приложение на Spring WebОбработчик, по мимо всего прочего, формирует pdf документ, и передаёт на скачивание
Пытаюсь понять в чем ошибка и на что ругается Android Studio в переопределении метода интерфейса, от которого имплементируюсь в данном классе
Не могу понять почему применяется внешнее правило CSS, a не внутреннее, <div class="Post_post__gI2Hu"> находится внутри <div class="Profile_content__3EemM">,...