61581229 发表于 2018-12-21 10:47:04

java之php、Android、JAVA、C# 3DES加密解密

  异常如下
1.javax.crypto.BadPaddingException: Given final block not properly padded
1)要确认下是否加密和解密都是使用相同的填充算法(也就是说,是否都是使用PKCS5Padding)  2)确认下你要解密的字节数组是否正确。
  javax.crypto.IllegalBlockSizeException:
  Input length must be multiple of 8 when decrypting with padded cipher
输入长度必须是8的倍数时,解密密文  一、java中简单的加密解密过程
  package mai.util;
  import java.security.Security;
  import javax.crypto.Cipher;
  import javax.crypto.SecretKey;
  import javax.crypto.spec.SecretKeySpec;

  public>  private static final String Algorithm = "DESede"; //定义 加密算法,可用 DES,DESede,Blowfish
  //keybyte为加密密钥,长度为24字节
  //src为被加密的数据缓冲区(源)
  public static byte[] encryptMode(byte[] keybyte, byte[] src) {
  try {
  //生成密钥
  SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
  //加密
  Cipher c1 = Cipher.getInstance(Algorithm);
  c1.init(Cipher.ENCRYPT_MODE, deskey);
  return c1.doFinal(src);
  } catch (java.security.NoSuchAlgorithmException e1) {
  e1.printStackTrace();
  } catch (javax.crypto.NoSuchPaddingException e2) {
  e2.printStackTrace();
  } catch (java.lang.Exception e3) {
  e3.printStackTrace();
  }
  return null;
  }
  //keybyte为加密密钥,长度为24字节
  //src为加密后的缓冲区
  public static byte[] decryptMode(byte[] keybyte, byte[] src) {
  try {
  //生成密钥
  SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
  //解密
  Cipher c1 = Cipher.getInstance(Algorithm);
  c1.init(Cipher.DECRYPT_MODE, deskey);
  return c1.doFinal(src);
  } catch (java.security.NoSuchAlgorithmException e1) {
  e1.printStackTrace();
  } catch (javax.crypto.NoSuchPaddingException e2) {
  e2.printStackTrace();
  } catch (java.lang.Exception e3) {
  e3.printStackTrace();
  }
  return null;
  }
  //转换成十六进制字符串
  public static String byte2hex(byte[] b) {
  String hs="";
  String stmp="";
  for (int n=0;n


页: [1]
查看完整版本: java之php、Android、JAVA、C# 3DES加密解密