は、Android/Javaアプリケーション暗号化と復号化
public static void setKey(String myKey) {
MessageDigest sha = null;
try {
key = new byte[]{(byte) '5', (byte) 'F', (byte) '8', (byte) 'p', (byte) 'J', (byte) 't', (byte) 'v', (byte) 'U', (byte) 'm', (byte) 'q', (byte) 'k', (byte) '7', (byte) 'A', (byte) 'M', (byte) 'v', (byte) 'b', (byte) 'q', (byte) 'o', (byte) 'H', (byte) 'M', (byte) '9', (byte) 'a', (byte) 'p', (byte) '4', (byte) '9', (byte) 'm', (byte) 'c', (byte) 'u', (byte) 'u', (byte) '5', (byte) 'B', (byte) 'X'};
System.out.println(new String(key, "UTF-8"));
secretKey = new SecretKeySpec(key, "AES");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static String encrypt(String strToEncrypt) {
try {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
setEncryptedarr(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));
setEncryptedString(String.valueOf(Base64.encode(cipher.doFinal(strToEncrypt.getBytes("UTF-8")), Base64.DEFAULT)));
//setEncryptedString(Base64.encodeBase64String(cipher.doFinal(strToEncrypt.getBytes("UTF-8"))));
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error while encrypting: " + e.toString());
}
return null;
}
public static String decryptbyte(byte[] strToDecrypt) {
try {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
setDecryptedarr(cipher.doFinal(strToDecrypt));
System.out.println("encrypt : decropted size : " + getDecryptedarr().length);
setDecryptedString(new String(cipher.doFinal(strToDecrypt)));
} catch (Exception e) {
System.out.println("Error wnhile decrypting: " + e.toString());
e.printStackTrace();
}
return null;
}
public static String decrypt(String strToDecrypt) {
try {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
setDecryptedarr(cipher.doFinal(Base64.decode(strToDecrypt, Base64.DEFAULT)));
setDecryptedString(new String(cipher.doFinal(Base64.decode(strToDecrypt, Base64.DEFAULT))));
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error while decrypting: " + e.toString());
}
return null;
}
では、私は、このコードに取り組んでいます:場合にはそれを使用する場合http://aesencryption.net/私はこのコードを切り取ら使用 がうまく機能していますの: encryptbyteとdecryptbyte whitch []バイトを取ると、私はこのサイトhttp://aesencryption.net/
で暗号化のそれの結果をテストするが、私はそれがデータをdecriptする必要が(応答は文字列が来ている)サーバーから来ました私はバイトを文字列に変換するときはと[]は常にコードthraw例外: javax.crypto.IllegalBlockSizeException:エラー:0606506D:デジタルエンベロープ・ルーチン:EVP_DecryptFinal_ex:間違った最後のブロック長**
私はそれは時に秘密だと思いますStringをbyte []に変換します。変換するのが正しい場合は、それを変更します。 アドバイスをお願いします。
このコードthraw例外:末尾==
文字に気づく、strToDecrypt = "tATTXSdXI4w0oiu/fzgpyA=="
base64エンコーディングを持っていると思われる:
try {
AES.setKey("");
final String strToDecrypt = "tATTXSdXI4w0oiu/fzgpyA==";
AES.decryptbyte(toBytes(strToDecrypt.toCharArray()));
} catch (Exception ex) {
ex.printStackTrace();
}
これは、コードの最後のビットは例外
01-21 15:24:55.861 15700-15700/ W/System.err: javax.crypto.IllegalBlockSizeException: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length
01-21 15:24:55.861 15700-15700/ W/System.err: at com.android.org.conscrypt.NativeCrypto.EVP_CipherFinal_ex(Native Method)
01-21 15:24:55.861 15700-15700/ W/System.err: at com.android.org.conscrypt.OpenSSLCipher.doFinalInternal(OpenSSLCipher.java:430)
01-21 15:24:55.861 15700-15700/ W/System.err: at com.android.org.conscrypt.OpenSSLCipher.engineDoFinal(OpenSSLCipher.java:466)
01-21 15:24:55.861 15700-15700/ W/System.err: at javax.crypto.Cipher.doFinal(Cipher.java:1340)
01-21 15:24:55.861 15700-15700/ W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
01-21 15:24:55.861 15700-15700/ W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2648)
01-21 15:24:55.861 15700-15700/ W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2769)
01-21 15:24:55.861 15700-15700/ W/System.err: at android.app.ActivityThread.access$900(ActivityThread.java:177)
01-21 15:24:55.861 15700-15700/ W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1430)
01-21 15:24:55.861 15700-15700/ W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
01-21 15:24:55.861 15700-15700/ W/System.err: at android.os.Looper.loop(Looper.java:135)
01-21 15:24:55.861 15700-15700/ W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5910)
01-21 15:24:55.861 15700-15700/ W/System.err: at java.lang.reflect.Method.invoke(Native Method)
01-21 15:24:55.861 15700-15700/ W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
01-21 15:24:55.861 15700-15700/ W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
01-21 15:24:55.861 15700-15700/ W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
データはどこですか?いくつかの16進ダンプを追加し、それらを調べます。さまざまなエンコーディングを理解すると役に立ちます。また、ECBモードは鍵の文字列のように安全ではありません。これは、暗号化の使用を言いたいのにセキュリティを本当に必要としない場合にのみ適切です。 – zaph