Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java密码加密消息_Java_Encryption - Fatal编程技术网

使用java密码加密消息

使用java密码加密消息,java,encryption,Java,Encryption,这是一个学校项目,我必须用密码加密一条消息。因此,我连接到服务器,似乎一切正常,但行cipher.init(cipher.ENCRYPT\u MODE,secret)它破坏了所有的代码,所以在此之前我不能做一个sout,有人能帮我吗 try { String sName = "localhost"; int port = 8080; Socket client = new Socket(sName, port); OutputStream os

这是一个学校项目,我必须用密码加密一条消息。因此,我连接到服务器,似乎一切正常,但行
cipher.init(cipher.ENCRYPT\u MODE,secret)它破坏了所有的代码,所以在此之前我不能做一个
sout
,有人能帮我吗

try {
      String sName = "localhost";
      int port = 8080;

      Socket client = new Socket(sName, port);
      OutputStream os = client.getOutputStream();
      OutputStreamWriter osw = new OutputStreamWriter(os);
      BufferedWriter bw = new BufferedWriter(osw);

      //String password = null;
      String password = fieldPassword.getText();
      char[] a = password.toCharArray();
      byte[] salt = new byte[256];

      SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
      KeySpec spec = new PBEKeySpec(a, salt, 65536, 256);
      SecretKey tmp = factory.generateSecret(spec);
      SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");


      Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
      cipher.init(Cipher.ENCRYPT_MODE, secret);
      String msg = jTextField2.getText();
      byte[] text = msg.getBytes();
      byte[] ciphertext = cipher.doFinal(text);

      String hex=DatatypeConverter.printHexBinary(ciphertext);
      System.out.println(hex);

      String sendMessage = "{'command':'send','dst':'" + jTextField1.getText() + "','msgencrypt':'" + hex  +"'}";`this is json to send to the server`
      bw.write(sendMessage);
      bw.flush();
 } catch (IOException ex) {
      Logger.getLogger(NewJFrame3.class.getName()).log(Level.SEVERE, null, ex);
 }catch (Exception e){ 
 }

您正在请求密钥大小为256位的AES密钥,密钥大小为:

KeySpec spec = new PBEKeySpec(a, salt, 65536, 256);
但是由于以下原因,未修补的JVM将不允许这么大的AES密钥

e使用无限强度权限策略文件修补JVM,或使用128位密钥尝试使用:

KeySpec spec = new PBEKeySpec(a, salt, 65536, 128);

您正在请求密钥大小为256位的AES密钥,密钥大小为:

KeySpec spec = new PBEKeySpec(a, salt, 65536, 256);
但是由于以下原因,未修补的JVM将不允许这么大的AES密钥

e使用无限强度权限策略文件修补JVM,或使用128位密钥尝试使用:

KeySpec spec = new PBEKeySpec(a, salt, 65536, 128);

请在代码示例中提供引发的异常。在
catch(异常e)
子句中添加一条记录器语句以获取它。旁注:salt应该是随机数据。在你的例子中,它是一个零数组。这不是随机的。你有一个空的捕获块。那是个非常糟糕的主意。您应该始终打印或记录完整的堆栈跟踪。如果不这样做,糟糕的事情会在你不知情的情况下发生。请提供引发的异常和代码示例。在
catch(异常e)
子句中添加一条记录器语句以获取它。旁注:salt应该是随机数据。在你的例子中,它是一个零数组。这不是随机的。你有一个空的捕获块。那是个非常糟糕的主意。您应该始终打印或记录完整的堆栈跟踪。如果你不这样做,坏事就会在你不知情的情况下发生。