Почему моя зашифрованная строка выглядит как состоящая только из вопросительных знаков? - PullRequest
2 голосов
/ 22 февраля 2010

Я шифрую строку в Java, и когда я печатаю зашифрованные данные, я вижу только вопросительные знаки.

Как пример:

  • Простой текст: jjkkjlkljkj

  • Зашифрованный текст: ???????????

  • После расшифровки этого текста я снова получаю jjkkjlkljkj.

Похоже, шифрование сработало правильно. Но почему я вижу только вопросительные знаки?

Ответы [ 2 ]

6 голосов
/ 22 февраля 2010

Да, это потому, что вы не можете напечатать строки, которые являются результатом шифрования.

Обратите внимание, что сохранение зашифрованного результата в строку может привести к потере данных, поэтому не делайте этого. Возьмите его как байтовый массив и преобразуйте в отображаемый формат, например Base64 или просто шестнадцатеричный.

1 голос
/ 22 февраля 2010

Основной причиной проблемы является способ представления зашифрованных данных. Используемая кодировка символов не распознает эти символы как одну из его кодировки и не имеет подходящего глифа (шрифта) для этих символов. Даже тогда, когда вы использовали «правильную» кодировку символов (попробуйте отобразить ее с помощью UTF-8), она не была бы удобочитаемой для человека.

Я полагаю, что у вас есть вариант byte[], и вы пытаетесь преобразовать его в String, используя new String(bytearray). Если ваша цель - перевести его как String вместо byte[], тогда вам лучше использовать Apache Commons Codec Base64#encodeBase64String() или преобразовать byte[] в шестнадцатеричную строку, как следует:

StringBuilder hex = new StringBuilder(bytea.length * 2);
for (byte b : bytea) {
    if ((b & 0xff) < 0x10) hex.append("0");
    hex.append(Integer.toHexString(b & 0xff));
}
String hexString = hex.toString();
...