1

私はこのアルゴリズムをアンドロイドのデータの暗号化と復号化に使用しています。しかし、utf-8 文字を使用すると、次のエラーが表示されます: [encrypt] data not block size Align.

暗号化と復号化にこのアルゴリズムを使用します: https://snipt.net/raw/ee573b6957b7416f28aa560ead71c3a2/?nice

私のコード:

HttpClient client = new DefaultHttpClient();

        HttpPost post = new HttpPost(ServerIP.frooshgah_URL);
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        JSONObject json = new JSONObject();



        try {
            json.put("UserId", "0s");
            json.put("N_frooshgah", N_frooshgah);
            json.put("N_masol", N_masol);
            json.put("N_makan", N_makan);
            json.put("address", address);
            json.put("tel", tel);
            json.put("time_baz", time_baz);
            json.put("time_baste", time_baste);
            json.put("tavzihat", tavzihat);
            json.put("tag", tag);
            json.put("categori", "پوشاک");
            json.put("city", city);
            json.put("lat", lat);
            json.put("long", Long);

        } catch (JSONException e3) {
            // TODO Auto-generated catch block
            e3.printStackTrace();
        }

        MCrypt mcrypt = new MCrypt();
        String encrypted = "";
        try {

            encrypted = MCrypt.bytesToHex(mcrypt.encrypt(json.toString()));
            //encrypted = encryption.hexToString(json.toString(), 2);
              //key = UUID.randomUUID().toString().replaceAll("-", "");
            //encrypted=Crypto.encrypt(json.toString(),key);


        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

この問題を解決するには?

ありがとう

4

1 に答える 1

1

まず、MCryptあなたが使用しているクラスがソース コードを提供していることがわかります。ソース コードをダウンロードしてプロジェクトに追加し、padString(string)メソッドを次のように変更します。

private static String padString(String source){
  char paddingChar = ' ';
  int size = 16;
  int x = source.getBytes(Charset.forName("UTF-8")).length % size;
  int padLength = size - x;

  for (int i = 0; i < padLength; i++)
  {
          source += paddingChar;
  }

  return source;
}

UTF-8これにより、として使用しながらコードを実行できcharsetます。ライブラリを「改善」して複数の文字セットをサポートする場合は、クラスの/メソッドにcharsetパラメーターを追加することを検討してください。encryptdecrypt

于 2013-08-17T03:51:50.327 に答える