I followed this tutorial for encrypting and decrypting simple strings in android/java:
我跟随本教程,对android/java中的简单字符串进行了加密和解密:
https://stackoverflow.com/questions/4319496/how-to-encrypt-and-decrypt-data-in-java I made a Cryptography class:
我做了一个加密类:
public class Cryptography {
public static SecretKey generateKey() throws NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA");
digest.update("BhLKTyLoP YroUsRQT".getBytes());
return new SecretKeySpec(digest.digest(), 0, 16, "AES");
}
public static byte[] encrypt(String message, SecretKey key) throws NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, NoSuchPaddingException, InvalidKeyException, UnsupportedEncodingException {
Cipher aes = Cipher.getInstance("AES/ECB/PKCS5Padding");
aes.init(Cipher.ENCRYPT_MODE, key);
return aes.doFinal(message.getBytes());
}
public static String decrypt(byte[] cipherText, SecretKey key) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
Cipher aes = Cipher.getInstance("AES/ECB/PKCS5Padding");
aes.init(Cipher.DECRYPT_MODE, key);
return new String(aes.doFinal(cipherText));
}
}
I was able to encrypt method and gave me this:
我可以加密方法给我这个:
Encrypted username: [B@52aff408
Encrypted password: [B@52aff6d8
However, when I use decrypt:
然而,当我使用解密:
SecretKey secret = Cryptography.generateKey();
Log.d("encryption", "Decrypted username: " + Cryptography.decrypt(encryptedUsername.getBytes(),secret)
+ " Decrypted password: " + Cryptography.decrypt(encyptedPassword.getBytes(),secret));
It gives me the error:
它给了我错误:
03-25 15:22:23.461 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ java.lang.RuntimeException: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length
03-25 15:22:23.461 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at org.apache.harmony.xnet.provider.jsse.NativeCrypto.EVP_CipherFinal_ex(Native Method)
03-25 15:22:23.461 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at org.apache.harmony.xnet.provider.jsse.OpenSSLCipher.doFinalInternal(OpenSSLCipher.java:398)
03-25 15:22:23.461 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at org.apache.harmony.xnet.provider.jsse.OpenSSLCipher.engineDoFinal(OpenSSLCipher.java:434)
03-25 15:22:23.461 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at javax.crypto.Cipher.doFinal(Cipher.java:1111)
03-25 15:22:23.461 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at com.sblive.utils.Cryptography.decrypt(Cryptography.java:28)
03-25 15:22:23.465 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at com.sblive.aufschoolbliz.GradeBookFragment$2.onClick(GradeBookFragment.java:99)
03-25 15:22:23.465 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at android.view.View.performClick(View.java:4240)
03-25 15:22:23.465 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at android.view.View$PerformClick.run(View.java:17721)
03-25 15:22:23.465 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:730)
03-25 15:22:23.465 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:92)
03-25 15:22:23.465 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at android.os.Looper.loop(Looper.java:137)
03-25 15:22:23.465 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5103)
03-25 15:22:23.465 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
03-25 15:22:23.465 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:525)
03-25 15:22:23.465 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-25 15:22:23.469 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-25 15:22:23.469 2073-2073/com.sblive.aufschoolbliz W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
1 个解决方案
#1
3
Encrypted username: [B@52aff408
加密用户名:[B@52aff408
Encrypted password: [B@52aff6d8
加密的密码:[B@52aff6d8
These are too small. Assuming the plain text message was fewer than 16 bytes, then these should be exactly 16 bytes because of PKCS padding.
这些都是太小了。假设纯文本消息少于16个字节,那么这些应该正好是16字节,因为PKCS填充。
You have an encoding problem somewhere. Probably an embedded null that slices off the end of the cipher text when interpreted as a string...
你在某个地方有一个编码问题。可能是一个嵌入的null,当被解释为字符串时,将密码文本的末端切掉。
As a matter of fact, they look like pointers being printed....
事实上,它们看起来像指针被打印出来了