Bhu*_*ban 12 java encryption aes
我是密码技术的新手.我发现这段代码可以进行对称加密.
byte[] key = //... secret sequence of bytes
byte[] dataToSend = ...
Cipher c = Cipher.getInstance("AES");
SecretKeySpec k = new SecretKeySpec(key, "AES");
c.init(Cipher.ENCRYPT_MODE, k);
byte[] encryptedData = c.doFinal(dataToSend);
Run Code Online (Sandbox Code Playgroud)
它的工作.在这里,我可以使用自己的密码.那就是我需要的东西.但我不知道怎么做128或256 Symmetric Enctryption.如何在代码中使用128和256键?
Pet*_*aný 16
AES是使用128位还是256位模式取决于密钥的大小,密钥长度必须为128或256位.通常,您不会将密码用作密钥,因为密码很少具有您需要的确切长度.相反,您可以使用某些密钥派生函数从密码派生加密密钥.
非常简单的示例:获取密码的MD5以获得128位密钥.如果需要256位密钥,可以使用SHA-256获取密码的256位哈希值.密钥派生函数通常运行此散列数百次并使用额外的盐.有关详细信息,请查看http://en.wikipedia.org/wiki/Key_derivation_function.
另请注意:要运行超过128位的加密,您需要从http://www.oracle.com/technetwork/java/javase/downloads下载并安装"Java Cryptography Extension(JCE)Unlimited Strength Jurisdiction Policy Files 6" . /index.html.
小智 6
以下方法是valueEnc使用AES加密来加密字符串():
private static final String ALGORITHM = "AES";
public String encrypt(final String valueEnc, final String secKey) {
String encryptedVal = null;
try {
final Key key = generateKeyFromString(secKey);
final Cipher c = Cipher.getInstance(ALGORITHM);
c.init(Cipher.ENCRYPT_MODE, key);
final byte[] encValue = c.doFinal(valueEnc.getBytes());
encryptedVal = new BASE64Encoder().encode(encValue);
} catch(Exception ex) {
System.out.println("The Exception is=" + ex);
}
return encryptedVal;
}
Run Code Online (Sandbox Code Playgroud)
下一个方法将解密AES加密的字符串(encryptedVal):
public String decrypt(final String encryptedValue, final String secretKey) {
String decryptedValue = null;
try {
final Key key = generateKeyFromString(secretKey);
final Cipher c = Cipher.getInstance(ALGORITHM);
c.init(Cipher.DECRYPT_MODE, key);
final byte[] decorVal = new BASE64Decoder().decodeBuffer(encryptedValue);
final byte[] decValue = c.doFinal(decorVal);
decryptedValue = new String(decValue);
} catch(Exception ex) {
System.out.println("The Exception is=" + ex);
}
return decryptedValue;
}
Run Code Online (Sandbox Code Playgroud)
这secKey是一个128位密钥,编码在BASE64Encoder.将BASE64Decoder在下面的方法产生一个适当的128位密钥
private Key generateKeyFromString(final String secKey) throws Exception {
final byte[] keyVal = new BASE64Decoder().decodeBuffer(secKey);
final Key key = new SecretKeySpec(keyVal, ALGORITHM);
return key;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63185 次 |
| 最近记录: |