- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我按照本教程在 android/java 中加密和解密简单字符串:
https://stackoverflow.com/questions/4319496/how-to-encrypt-and-decrypt-data-in-java我做了一个密码学课:
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));
}
}
我能够加密方法并给了我这个:
Encrypted username: [B@52aff408
Encrypted password: [B@52aff6d8
但是,当我使用解密时:
SecretKey secret = Cryptography.generateKey();
Log.d("encryption", "Decrypted username: " + Cryptography.decrypt(encryptedUsername.getBytes(),secret)
+ " Decrypted password: " + Cryptography.decrypt(encyptedPassword.getBytes(),secret));
它给我错误:
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)
最佳答案
Encrypted username: [B@52aff408
Encrypted password: [B@52aff6d8
这些太小了。假设纯文本消息少于 16 个字节,那么由于 PKCS 填充,这些应该正好是 16 个字节。
您在某个地方遇到了编码问题。可能是一个嵌入的空值,当被解释为字符串时,它会切掉密文的末尾......
事实上,它们看起来像是打印出来的指针....
关于java - 解密时得到 "EVP_DecryptFinal_ex:wrong final block length",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22628085/
我正在使用 openssl 函数解密一些数据,但解密的最终结果存在一些问题。 EVP_DecryptInit_ex(ctx, EVP_aes_192_cbc(), NULL, myKey, myVe
我有以下代码用于用 Java 解密我的数据,但它给了我“Bad Decrypt”错误。谁能帮我解决这个问题? String input = "5H5h8acnv2gzv2PeTVb+pw==
我正在使用此解密函数来获取使用 EVP AES 265 GCM 加密的密码的纯文本值;我可以在 rawOut 中看到数据,但 ret = EVP_DecryptFinal_ex(ctx, rawOut
出于学习目的,我已经实现了一个简单的 AES-256-GCM 加密和解密。在测试我的代码时,如果我输入的字符串长度是 6 的倍数,那么我会得到正确的输出,但对于其他情况,解密后的数据会附加一些垃圾字符
我正在尝试使用 AES 128 cbc 模式进行解密的 OpenSSL EVP 例程。 我使用 NIST 站点指定的测试 vector 来测试我的程序。 程序似乎在 EVP_DecryptFinal_
我有以下问题。有人可以给我建议一个解决方案吗。 我是第一次做文件的加密和解密。 我使用以下命令通过命令提示符加密了文件: openssl enc -aes-256-cbc -in file.txt -
我按照本教程在 android/java 中加密和解密简单字符串: https://stackoverflow.com/questions/4319496/how-to-encrypt-and-dec
我要回顾一些我之前为加密而编写的代码 [包含在这篇文章的底部],但我遇到了一个错误,我找不到解决方法。每当我尝试解密我的数据时,我都会从 OpenSSL 收到以下错误: error:0606506D:
我正在使用此处找到的 EVP 库:https://www.openssl.org/docs/manmaster/crypto/EVP_EncryptInit.html 这是我的两个加密和解密函数: 我
这是我之前问题的延续:Intermittent decryption failures in EVP_DecryptFinal_ex when using AES-128/CBC . 我正在尝试使用
实际上我在一个应用程序中工作并且在解密 AES 时遇到问题 我在这一行 byte[] results = cipher.doFinal(Base64.encode(text.getBytes("UTF
使用以下 Node js: var crypto = require('crypto'); var encrypt = function (input, password, callback) {
我是 C 程序新手。当前使用 EVP 我想解密文本。当我解密时,我得到 error as "digital envelope routines:EVP_DecryptFinal_ex:wrong fi
我已经使用以下命令生成了证书。 openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 我在 nest j
我正在使用 SSO 开发一个 Moodle 网站。我已经配置了 auth_saml2 moodle 插件,并且已经使用测试登录进行了测试。我收到错误 Exception: Failure Signin
我有一个 node.js 客户端,它从另一台主机下载并解密 AES 加密文件。 var base64 = require('base64-stream'); var crypto = require(
我有一个 Angular 7 应用程序,它应该使用 Let's Encrypt 证书。 我正在使用以下配置运行应用程序: ng serve --host 0.0.0.0 --disable-host-
我是一名优秀的程序员,十分优秀!