У меня есть реализация алгоритма шифрования DES в JAVA (javax.crypto.Cipher), он успешно кодирует и расшифровывает (большинство) строки ... проблема в том, что иногда это специфичные для сообщения блоки (поскольку DES использует 8-символьные блоки в блочном режиме).Кодирование вывода шифрования JAVA DES
В моем случае почти всегда 3-й блок перепутался, и отдых показывает хорошо.
, например:
ключ: thisiskey
сообщение для шифрования: Google is an American multinational technology company specializing in Internet-related services
зашифрованное сообщение (в UTF-8):
mñqè•ÀPŒ�øf"
ߦ\±õ¤ù'È9¢ëyT ÍQEÁ|;ëâÉ÷JWú
Теперь, когда я иду и дешифрования это, я получаю это:
Decrypted сообщение:
Google i,í\O¯‹Ýbº-¸�¬ltinational technology company specializHôJ—=ÊÍnternet-related services
Насколько я понимаю, этот вопрос, это связано с тем, что UTF-8 не может показать все символы и, таким образом, показывая, а также копирования для расшифровки, эта проблема возникает.
Может ли кто-нибудь предложить мне решение? Предпочтительно либо набор символов, который может обрабатывать это, либо способ преобразования Binary непосредственно в HEX (который может быть выведен для пользователя), а затем Vice Versa (расшифрованный после копирования/вставки) в JAVA.
EDIT Это «приблизительный» код, не точно (например, зашифрованное сообщение не правильно пастообразное состояние и эти части функции, но она должна дать идею). Даже в кодировке base64 я не могу получить эту дешифровку должным образом.
Encrypt Function code:
boolean base64 = true;
key = "thisiskey";
plainText = "Google is an American multinational technology company specializing in Internet-related services";
SecretKeyFactory MyKeyFactory = SecretKeyFactory.getInstance("DES");
byte[] keyBytes = key.getBytes();
DESKeySpec generatedKeySpec = new DESKeySpec(keyBytes);
SecretKey generatedSecretKey = MyKeyFactory.generateSecret(generatedKeySpec);
Cipher generatedCipher = Cipher.getInstance("DES");
generatedCipher.init(Cipher.ENCRYPT_MODE, generatedSecretKey);
byte[] messsageStringBytes = plainText.getBytes();
byte[] encryptedMessage = generatedCipher.doFinal(messsageStringBytes);
String encryptedMessageString = new String(encryptedMessage);
if (base64) {
encryptedMessageString = Base64.getEncoder().encodeToString(encryptedMessageString.getBytes("utf-8"));
}
return encryptedMessageString;
Расшифровать Код функции:
boolean dbase64 = true;
dkey = "thisiskey";
messageToDecrypt = "mñqè•ÀPŒ�øf\"ߦ\±õ¤ù'È9¢ëyT ÍQEÁ|;ëâÉ÷JWú"; // Message from above code
SecretKeyFactory MyKeyFactory = SecretKeyFactory.getInstance("DES");
byte[] dkeyBytes = dkey.getBytes();
DESKeySpec generatedKeySpec = new DESKeySpec(dkeyBytes);
SecretKey generatedSecretKey = MyKeyFactory.generateSecret(generatedKeySpec);
Cipher generatedCipher = Cipher.getInstance("DES");
generatedCipher.init(Cipher.DECRYPT_MODE, generatedSecretKey);
if (dbase64) {
byte[] decodedBytes = Base64.getDecoder().decode(dencryptedText);
dencryptedText = new String(decodedBytes, "utf-8");
}
byte[] messsageStringBytes = dencryptedText.getBytes();
byte[] encryptedMessage = generatedCipher.doFinal(messsageStringBytes);
String decryptedMessageString = new String(encryptedMessage);
return decryptedMessageString;
Как вы могли ожидать, что кто-нибудь сможет вам помочь без вашего кода? –
DES - отличный алгоритм шифрования, если безопасность не требуется. DES был заменен AES, используйте AES. Пожалуйста, не создавайте плохую безопасность, у нас уже достаточно. – zaph