我有一个快速的问题,希望可以快速解决。
我目前有一个客户端/服务器程序从客户端获取输入,使用UTF-8将其编码为字节数组,使用AES加密数组,将其发送到服务器,并反转解密过程。
唯一的问题是,如果消息中有空格,则只会在第一个空格之前显示该字作为解密消息。
E.G:
输入:你好我是汤姆
输出:你好
但如果我的输入只是一个单词,它就会完美解密
输入: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);
答案 0 :(得分:2)
请参阅Scanner:
扫描程序使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。
查找并返回此扫描仪的下一个完整令牌。在完成令牌之前和之后是与分隔符模式匹配的输入。即使先前调用
self.player = AVPlayer(URL: NSURL(fileURLWithPath: path!)) self.playerLayer = AVPlayerLayer(player: player); self.playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; self.playerLayer.frame = ctrVideo.bounds; self.ctrVideo.layer.addSublayer(playerLayer); player.play();
返回hasNext()
,此方法也可能在等待扫描输入时阻塞。
如果要扫描孔线,修改后的客户端代码为:
true
答案 1 :(得分:0)
你在做message = scanner.next();
。而不应该这样做,你应该message = scanner.nextLine();
做完整行作为输入。