0

こんにちは、Android アプリケーションに問題があります。tcp と udp を使用するクライアントを作成しました。データは AES によって暗号化されます。しかし、データグラムを受信しようとすると、アプリケーションが例外を返します。これは私のコードです:

protected Void doInBackground(Void... params) 
     {
         try
            {

             udp = new DatagramSocket(2500);

                 boolean flagaBYE = true;

                 String w = "";
                while(flagaBYE)
                {
                            byte[] receiveData= new byte[1024];

                                DatagramPacket pakiet = new DatagramPacket(receiveData, receiveData.length);
                                udp.receive(pakiet);

                    String wiadomosc = new String(pakiet.getData(),"utf-8");
                                publishProgress(wiadomosc);
                               String szyfr = main.preferences.getString("SZYFR_TCP", "");
                               if(!szyfr.equals("1"))
                               {
                                   Encryptor enc = new Encryptor(getKeyBytes(key), getCode());
                                   wiadomosc = enc.decrypt(wiadomosc);

                               }

私の例外はパッドブロックが破損しているため、次のようにキーを生成します。

 String key = "tojestkluczwlasnie";

そして、次に解析文字列を byte[] に

public static byte[] getKeyBytes(String key) throws UnsupportedEncodingException{
        byte[] keyBytes= new byte[16];
        byte[] parameterKeyBytes= key.getBytes("UTF-8");
        System.arraycopy(parameterKeyBytes, 0, keyBytes, 0, Math.min(parameterKeyBytes.length, keyBytes.length));
      return keyBytes;
    }
4

1 に答える 1

0

バイトをUTF-8文字列として扱わないでください。また、パスワードがキーである場合は、パスワードを扱わないでください。データ形式間の変換(エンコード/デコード)中に情報が失われる可能性があります。

于 2012-11-01T08:15:16.580 に答える