public class PasswordUtil { private static final String ALGORITHM = "PBKDF2WithHmacSHA256"; private static final int ITERATION_COUNT = 10000; private static final int KEY_LENGTH = 256; /** * * @param password * @param salt * @return */ public static String getSafetyPassword(String password, String salt) { char[] passCharAry = password.toCharArray(); byte[] hashedSalt = getHashedSalt(salt); PBEKeySpec keySpec = new PBEKeySpec(passCharAry, hashedSalt, ITERATION_COUNT, KEY_LENGTH); SecretKeyFactory skf; try { skf = SecretKeyFactory.getInstance(ALGORITHM); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } SecretKey secretKey; try { secretKey = skf.generateSecret(keySpec); } catch (InvalidKeySpecException e) { throw new RuntimeException(e); } byte[] passByteAry = secretKey.getEncoded(); StringBuilder sb = new StringBuilder(64); for (byte b : passByteAry) { sb.append(String.format("%02x", b & 0xff)); } return sb.toString(); } /** * * @param salt * @return */ private static byte[] getHashedSalt(String salt) { MessageDigest messageDigest; try { messageDigest = MessageDigest.getInstance("SHA-256"); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } messageDigest.update(salt.getBytes()); return messageDigest.digest(); } }
在Java7中使用AES实现密码的加解密
Encryptionss.java::
public class Encryptionsss {
public static void main(String[] args) throws Exception {
try {
String text = "Hello World";
String key = "1234567891234567";
// Create key and cipher
Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
// encrypt the text
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
byte[] encrypted = cipher.doFinal(text.getBytes());
System.out.println("Encrypted text: " + new String(encrypted));
// decrypt the text
cipher.init(Cipher.DECRYPT_MODE, aesKey);
String decrypted = new String(cipher.doFinal(encrypted));
System.out.println("Decrypted text: " + decrypted);
}catch(Exception e) {
e.printStackTrace();
}
String plainText = "Hello World";
/**
* Generate new Key
*/
// String str = generatenewkeyasString();
/*** Generate Cipher Text from Key(We are using same key stored in String-str)
****/
String str = "]˜??4I-S@æ,Ôt";
byte[] data = str.getBytes();
SecretKey key2 = new SecretKeySpec(data, 0, data.length, "AES");
byte[] cipherText = encryptText(plainText, key2);
String scipherText = new String(cipherText);
/**
*
* Decrypt Cipher Text with Key****/
cipherText = scipherText.getBytes();
String decryptedText = decryptText(cipherText, key2);
System.out.println("ScipherText:" + scipherText);
System.out.println("Original Text:" + plainText);
System.out.println("AES Key (Hex Form):"
+ bytesToHex(key2.getEncoded()));
System.out.println("Encrypted Text (Hex Form):"
+ bytesToHex(cipherText));
System.out.println("Descrypted Text:" + decryptedText);
}
/**
*
* @return byte[] as String
* @Generate Key
*/
private static String generatenewkeyasString() throws Exception {
SecretKey secKey = KeyGenerator.getInstance("AES").generateKey();
byte[] data = secKey.getEncoded();
String str = new String(data);
return str;
}
/**
*
* Encrypts plainText in AES using the secret key
*
* @param plainText
*
* @param secKey
*
* @return
*
* @throws Exception
*/
public static byte[] encryptText(String plainText, SecretKey secKey)
throws Exception {
// AES defaults to AES/ECB/PKCS5Padding in Java 7
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.ENCRYPT_MODE, secKey);
byte[] byteCipherText = aesCipher.doFinal(plainText.getBytes());
return byteCipherText;
}
/**
*
* Decrypts encrypted byte array using the key used for encryption.
*
* @param byteCipherText
* @param secKey
*
* @return
*
* @throws Exception
*/
public static String decryptText(byte[] byteCipherText, SecretKey secKey)
throws Exception {
// AES defaults to AES/ECB/PKCS5Padding in Java 7
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.DECRYPT_MODE, secKey);
byte[] bytePlainText = aesCipher.doFinal(byteCipherText);
return new String(bytePlainText);
}
/**
*
* Convert a binary byte array into readable hex form
*
* @param hash
*
* @return
*/
private static String bytesToHex(byte[] hash) {
return DatatypeConverter.printHexBinary(hash);
}
}
问题内容: 首先,我希望这不是问题,所以我开始了一个新话题。我不知道如何根据已经回答的问题提出问题,所以我做到了。 我对Java很陌生,以下是我的问题。我正在编写一个小型聊天程序,并且使用带有的来显示不同颜色的文本,显示笑脸和显示超链接。 我的问题是,经过一些研究,我发现问题可能是由于Java7造成的,我无法使换行器正常工作。我希望文本自动换行,并包裹在超出组件宽度的字符串中间。自动换行可以很好地
Java 7的并发性和并行性特性——Fork/Join框架让我的手变得脏兮兮的。 我试图显示给定路径下的所有目录的列表。有人能告诉我我是否答对了吗? 下面是我的主要课程——JoinForkExample,它启动了这项任务 这是我的实际任务 我基本上达到了预期的效果。但我不太确定我是否做对了。令人惊讶的是,即使没有使用join/fork框架,我也没有注意到执行过程中的任何时间差。 任何想法!
我使用intellij IDEA进行开发,我注意到IDEA在Java7上运行时,maven插件在下载依赖项时出现了问题(我在Windows7)。然而,在Java6上运行它就没有这个问题了。 以下是idea.log的摘录 我按照建议做了以下几点 > 确保我的/etc/hosts文件中有 将添加到我的idea64.exe.vmoptions,因此文件如下所示 谢谢你的帮助。
支持哪些版本的Java? 但是,生成失败,出现以下消息:
问题内容: JLS v7的第18章中的语法似乎与文档中其他地方的结构不同,但是对我而言似乎有所不同。具体在第15章中,规则是: 这样就可以创建一个RelationalExpression(并因此生成一个EqualityExpresson),而该关系又可以在创建EqualityExpression的EqualityExpression规则中用作LHS 。 但是当看第18章中的语法时,他们做了一些简化
我遇到了一个奇怪的问题——供应商使用TLS SSLv3,同时使用自签名客户端和服务器证书。Java1.5和Java1.6没有这个问题——只需将客户端证书和私钥导入密钥库,将服务器公共证书导入信任库。一切都很好。然而,在Java7中,服务器证书无法被信任,即使使用的是同一个信任库。我尝试过使用Java7 (1.7.03, 04和05、x86和x64版本)的视窗和红帽,但没有成功。 我从头开始重新创建
Java7编译器是如何处理多捕获块的?一个简单的实现是生成字节码,就好像存在多个catch块一样。然而,我从多个来源得到的信息表明,情况并非如此--处理多个异常类型的catch块在编译期间不会产生重复的字节码。 那么,它是如何工作的呢?是否有一个新的字节码指令告诉JVM关于多捕获块?
我有一个字符串,其中我需要拆分它并存储在ArrayList中,如下所示;所有这些都使用Java7。 下面是我的程序的输入; 我在这里试图实现的是一个数组列表,如下所示。 我编写了一个示例代码,但似乎没有将elementB分组到列表中。我们如何将这两个元素组合成一个列表。 示例代码: 我得到下面的输出,其中elementB没有改变,而是重复自身。有人能给我指路吗