【发布时间】:2016-02-16 21:25:01
【问题描述】:
我有一个快速的问题,希望能快速解决。
我目前有一个客户端/服务器程序,它从客户端获取输入,使用 UTF-8 将其编码为字节数组,使用 AES 加密数组,将其发送到服务器,然后反转解密过程。
唯一的问题是,如果消息中有来自用户的空格,它将只显示第一个空格之前的单词作为解密消息。
例如:
输入:你好,我是汤姆
输出:你好
但如果我的输入都是一个单词,它会完美解密
输入:HelloIamTom
输出:HelloIamTom
我在任何地方都找不到这方面的信息!
任何帮助将不胜感激,
客户代码
System.out.println("Please type a message to be encrypted:");
message = scanner.next();
//create iv array
byte[] iv = toByteArray("a11f001ed2dec0de6e6f6e73656e7365");
Cipher aesCipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
SecretKey key = new SecretKeySpec(decryptedKey, "AES");
IvParameterSpec ivParSpec = new IvParameterSpec(iv);
aesCipher.init(Cipher.ENCRYPT_MODE, key, ivParSpec);
byte[] encryptedMessage = aesCipher.doFinal(message.getBytes("UTF-8"));
dos.writeInt(encryptedMessage.length);
dos.write(encryptedMessage);
服务器代码
int length = dis.readInt();//recieve length of byte array for incoming message
byte[] encryptedMessage = new byte[length];//create a byte array to the length recieved
dis.readFully(encryptedMessage);//fill the byte array with incoming data
//decrypt using AES
Cipher aesCipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");//create a cipher with correct parameters
IvParameterSpec ivParaSpec = new IvParameterSpec(iv);//create IvParameter spec using IV provided in assignment brief
aesCipher.init(Cipher.DECRYPT_MODE,key,ivParaSpec);//initialise the Cipher in DECRYPT mode
byte[] decryptedMessage = aesCipher.doFinal(encryptedMessage);//create decryptedMessage and put in byte array
String decMess = new String(decryptedMessage,"UTF-8");
System.out.println("User ID:");
System.out.println(uid);
System.out.println("Decrypted Message:");
System.out.println(decMess);
【问题讨论】:
-
代替
message = scanner.next();试试...message = scanner.nextLine();
标签: java encryption encoding utf-8 aes