par*_*tkr 1 java encryption android
public static String Encrypt(String text){
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] keyBytes= new byte[16];
byte[] b= KEY.getBytes("UTF-8");
int len= b.length;
if (len > keyBytes.length) len = keyBytes.length;
System.arraycopy(b, 0, keyBytes, 0, len);
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(keyBytes);
cipher.init(Cipher.ENCRYPT_MODE,keySpec,ivSpec);
byte[] results = cipher.doFinal(text.getBytes("UTF-8"));
String result = Base64.encodeToString(results, 0);
//result = URLEncoder.encode(result.trim(),"UTF-8");
return result;
} catch (Exception e) {
// TODO: handle exception
return null;
}
}
public static String Decrypt(String text){
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] keyBytes= new byte[16];
byte[] b= KEY.getBytes("UTF-8");
int len= b.length;
if (len > keyBytes.length) len = keyBytes.length;
System.arraycopy(b, 0, keyBytes, 0, len);
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(keyBytes);
cipher.init(Cipher.DECRYPT_MODE,keySpec,ivSpec);
byte[] results = cipher.doFinal(text.getBytes("UTF-8"));
String result = Base64.encodeToString(results, 0);
//result = URLEncoder.encode(result.trim(),"UTF-8");
return result;
} catch (Exception e) {
// TODO: handle exception
Log.d("decryption", e.getMessage());
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
这是加密和解密的代码,我从其他一些问题得到加密算法,它对我来说工作正常,但我也需要解密,我试图像加密一样模仿它,但它不起作用.例外情况说最后一块不完整.
问题是您没有以相反的顺序执行反向序列.你最终得到了base64编码的数据 - 所以你需要做的第一件事是使用base64-decode来获取二进制加密数据.然后解密,然后使用UTF-8将其转换回字符串.
public static String decrypt(String text){
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] keyBytes= new byte[16];
byte[] b= KEY.getBytes("UTF-8");
int len= b.length;
if (len > keyBytes.length) len = keyBytes.length;
System.arraycopy(b, 0, keyBytes, 0, len);
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(keyBytes);
cipher.init(Cipher.DECRYPT_MODE,keySpec,ivSpec);
byte[] results = cipher.doFinal(Base64.decode(text, 0));
return new String(results, "UTF-8");
} catch (Exception e) {
// TODO: handle exception
Log.d("decryption", e.getMessage());
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
当你从某个地方获取代码时,重要的是你真正了解它正在做什么 - 特别是,在这里了解每个阶段的数据是什么样的:
每当你进行这样的转换时,当你想要反转它时,你也需要反转步骤的顺序,以便回到原始数据.
| 归档时间: |
|
| 查看次数: |
1242 次 |
| 最近记录: |