- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试加密和解密 java 字符串。为此,我编写了以下 2 种方法:
public static String AESencryptString(String clearStr) throws Exception {
String cipherStr = null;
//génération de la clé de cryptage AES
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
PBEKeySpec spec = new PBEKeySpec(KEY.toCharArray());
Log.d("test", ""+ spec);
SecretKey tmp = factory.generateSecret(spec);
SecretKey key = new SecretKeySpec(tmp.getEncoded(), "AES");
//cryptage du mot de passe
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] cipherByteArray = cipher.doFinal(clearStr.getBytes("UTF-8"));
//convertion du mot de passe en String pour l'enregistrement en base
cipherStr = new String(Base64.encode(cipherByteArray, 0));
return cipherStr;
}
public static String AESdecryptString(String cipherStr) throws Exception {
String clearStr = null;
//génération de la clé de cryptage AES
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(KEY.toCharArray());
SecretKey tmp = factory.generateSecret(spec);
SecretKey key = new SecretKeySpec(tmp.getEncoded(), "AES");
//décryptage du mot de passe
Cipher decipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
decipher.init(Cipher.DECRYPT_MODE, key);
byte[] clearByteArray = decipher.doFinal(cipherStr.getBytes());
//convertion du mot de passe en String pour l'enregistrement en base
clearStr = new String(Base64.encode(clearByteArray, 0));
return clearStr;
}
在执行 factory.generateSecret 期间抛出的错误是“InvalidKeySpec” -> 我知道这个错误是由于缺少 SALT 但是,如果我可以只用密码创建 PBEKeySpec,它应该有办法使用它,你能帮忙找到它吗?
我尝试使用 SALT,只是为了测试......它也不起作用,但错误不一样。在这种情况下,错误是在“cipher.init”上抛出的,我无法弄清楚这个错误是什么,因为调试器告诉我“”
请帮助我,因为我会发疯的!
最佳答案
创建 PBEKeySpec 时您必须使用带有四个参数的构造函数:
PBEKeySpec(char[] password, byte[] salt, int iterationCount, int keyLength)
注意:您可以在加密文本之前存储未加密的盐。 iterationCount 可以在您的应用程序中进行硬编码。
byte[] salt = new byte[8];
new SecureRandom().nextBytes(salt);
PBEKeySpec spec = new PBEKeySpec(KEY.toCharArray(), salt, 10000, 128);
该示例对 AES128 使用 128,这通常就足够了。
关于java - 传递 PBEKeySpec 时 SecretKeyFactory generateSecret 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24427238/
我想知道当我使用 PBEKeySpec 创建安全密码时如何或是否应该测试 .clearPassword()?我可以以某种方式查看 .clearPassword() 之后我的内部副本是否仍然存在吗? 最
我以前从未使用过 C++,但现在我需要将此功能迁移到 C++: public static byte[] getSafeKey(String key, byte[] initVector) {
我正在使用以下代码,以便为提供的密码生成哈希值: public static SecretKey generateKey( String passphraseOrPin ) throws NoSuc
使用相同的 IV、key、iteration 和 salt 作为输入,每次生成的 PBEKeySpec 是否都相同?即: SecretKeyFactory factory = SecretKeyFac
我想知道是否有办法将 PBEKeySpec 与字节数组参数一起使用。 请找到以下文档的链接: http://docs.oracle.com/javase/1.7/docs/api/javax/cryp
http://docs.oracle.com/javase/7/docs/api/javax/crypto/spec/PBEKeySpec.html 盐、迭代次数和 key 长度是可选参数。如果未指定
如果我使用安全的随 secret 码作为 PBEKeySpec 的输入,它是否会增加迭代多次并添加盐的值(value)?它不会因此而变得更加随机,对吗? 最佳答案 如果密码是随机字节序列且长度正确,则
深入研究 java 加密和散列世界,我看到了 PBEKeySpec 类的构造函数示例,该类具有 iterationCount 和 keyLength 的各种值> 参数。似乎没有什么可以解释这些参数的影
我目前正在尝试加密和解密 java 字符串。为此,我编写了以下 2 种方法: public static String AESencryptString(String clearStr) throws
如果有人能给我一些指点:我有一个由 PBEKeySpec 生成的 KeySpec: KeySpec spec = new PBEKeySpec(password.toCharArray(), "SAL
这是我的java代码。现在我想在 Objective-C 中实现相同的功能。 int dkLen = 16; int rounds = 1000; PBEKeySpec keySpec = new P
我正在开发一些可互操作的代码,用于在 Java 和 Node.js 之间加密/解密字符串,并设法让 Node.js 解密 Java 加密的内容,这是成功解密的最后一部分: key 。 要在 Java
我是一名优秀的程序员,十分优秀!