- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我将 PBKDF2WithHmacSHA1 传递给 getInstance() 时,我不断收到 NoSuchAlgorithmException。
为什么会发生这种情况。我错过了一些进口吗?
import javax.crypto.*;
import javax.crypto.spec.*;
import java.security.SecureRandom;
import java.util.Scanner;
import java.security.spec.*;
import java.security.AlgorithmParameters;
import javax.crypto.SecretKeyFactory.*;
class AES
{
static public String encrypt(String input, String password)
{
SecureRandom random = new SecureRandom();
byte salt[] = new byte[8];
random.nextBytes(salt);
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 65536, 256);
SecretKey tmp = factory.generateSecret(spec);
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secret);
AlgorithmParameters params = cipher.getParameters();
byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();
byte[] ciphertext = cipher.doFinal(input.getBytes("UTF-8"));
String text = new String(ciphertext, "UTF-8");
return text;
}
}
还有没有办法使用 SHA2 代替 SHA1 ?
最佳答案
如果您使用的是 OpenJDK,则 this可能是你的情况。接受的答案指出:
The OpenJDK implementation does only provide a PBKDF2HmacSHA1Factory.java which has the "HmacSHA1" digest harcoded. As far as I tested, the Oracle JDK is not different in that sense.
What you have to do is derive the PBKDF2HmacSHA1Factory (come on, it is open!) and add a parameter to its constructor. You may avoid the mess of creating your own Provider, and just initialize and use your factory as follows:
PBKDF_SecretKeyFactory kf = new PBKDF_SecretKeyFactory("HmacSHA512");
KeySpec ks = new PBEKeySpec(password,salt,iterations,bitlen);
byte key[] = kf.engineGenerateSecret(ks).getEncoded();
关于使用 SHA2,this post可能有您正在寻找的东西。使用此代码片段:
public byte[] hash(String password) throws NoSuchAlgorithmException
{
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
byte[] passBytes = password.getBytes();
byte[] passHash = sha256.digest(passBytes);
return passHash;
}
关于java - SecretKeyFactory 的 NoSuchAlgorithmException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40427139/
我想使用 MessageDigest 获取 MD5 哈希值,但出现错误。 import java.security.MessageDigest; public class dn { public
我正在尝试使用 Jacksum API generate a Whirlpool hash ,但我收到了 NoSuchAlgorithmException: import java.security.
public static void main(String[] args) throws Exception { System.setProperty("javax.net.ssl.
我正在使用 IBM 的 Java 版本和 HttpClient,但收效甚微。每当我使用 HttpClient 对象的executeMethod() 时,我都会收到NoSuchAlgorithmExce
您好,我有以下函数可以在我的应用程序中将字符串转换为私钥: public static PrivateKey main() throws Exception { // Read in the
这是我的代码: static { Security.addProvider(new BouncyCastleProvider()); } ... final Cipher sifra = Ci
尝试编译以下代码时,我每次都会生成 NoSuchAlgorithmException,无论我将什么字符串分配给算法变量(AES、DESede 等)。错误总是在构造函数中抛出,当我第一次尝试为键赋值时,
当我将 PBKDF2WithHmacSHA1 传递给 getInstance() 时,我不断收到 NoSuchAlgorithmException。 为什么会发生这种情况。我错过了一些进口吗? imp
我正在尝试对安全网站进行 POST 调用: 步骤: 1) 转到https://www.mywebsite.com (供引用) 2) 将上述网站的 keystore 导出到C:\Program File
这是我的代码的加密部分。它编译正常但在运行时因该异常而失败: import java.util.Random; import javax.crypto.Cipher; import javax.cry
我想使用 flexiprovider library我正在尝试实例化一个简单的 de.flexiprovider.api.MessageDigest;与下一个代码 MessageDigest dige
方法SecureRandom.getInstanceStrong()声明它可以抛出 NoSuchAlgorithmException,但是文档说: Every implementation of th
我在使用 BouncyCaSTLe 检查 XMLSignature 以验证使用 ECDSA 的签名时遇到问题。 以下是相关的代码行: BouncyCastleProvider provider = n
Java 表示在这一行中,找不到文件 ssc.store: server = ((SSLServerSocketFactory) SSLServerSocketFactory.getDefault()
这是在将现有代码库克隆到 OSX 机器上之后第一次运行 ./gradlew 的错误。 有问题的包装器给出了以下输出(在另一个系统上) ./gradlew -v -------------------
查看下面的 java 行: Mac.getInstance("HmacSHA1"); 如果我把它放在一个简单的测试程序中,它在我的服务器上运行没有问题。但是,如果我在容器中使用这一行,我会得到 jav
我在以下代码中得到 NoSuchAlgorithmException: @RunWith(PowerMockRunner.class) @PrepareForTest({CloudWatchHel
在 JRE 1.8 (jdk1.8.0_101) 上使用 SSL 从 JBoss 连接 IBM MQ 时遇到问题 我在下面的 java.security 上发表评论,但没有任何变化: jdk.cert
我正在开发一个独立的java应用程序,它将打包为jar文件(OSGi插件),并在部署在Jboss AS 7.1上的EAR中运行当我尝试连接到Microsoft SQLServer 10 使用 JDBC
这段代码出现“javax.net.ssl.SSLException:连接重置” ReadableByteChannel rbc = Channels.newChannel(url.getInputSt
我是一名优秀的程序员,十分优秀!