android DES加密

/**
 * 提供加密算法,可以对输入的字符串进行加密、解密操作
 */
public class EncryptData {
 private byte[] encryptKey;
 private DESedeKeySpec spec;
 private SecretKeyFactory keyFactory;
 private SecretKey theKey;
 private Cipher cipher;
 private IvParameterSpec IvParameters;

 public EncryptData() {
  try {
   // 检测是否有 TripleDES 加密的供应程序
   // 如无,明确地安装SunJCE 供应程序
   try {
    Cipher c = Cipher.getInstance("DESede");
   } catch (Exception e) {
    System.err.println("Installling SunJCE provider.");
    Provider sunjce = new com.sun.crypto.provider.SunJCE();
    Security.addProvider(sunjce);
   }
   // 创建一个密钥
   encryptKey = "This is a test DESede Key".getBytes();

   // 为上一密钥创建一个指定的 DESSede key
   spec = new DESedeKeySpec(encryptKey);

   // 得到 DESSede keys
   keyFactory = SecretKeyFactory.getInstance("DESede");

   // 生成一个 DESede 密钥对象
   theKey = keyFactory.generateSecret(spec);

   // 创建一个 DESede 密码
   cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");

   // 为 CBC 模式创建一个用于初始化的 vector 对象
   IvParameters = new IvParameterSpec(new byte[] { 12, 34, 56, 78, 90,
     87, 65, 43 });
  } catch (Exception exc) {
   // 记录加密或解密操作错误
  }
 }

 /**
  * 加密算法
  *
  * @param password
  *            等待加密的密码
  * @return 加密以后的密码
  * @throws Exception
  */
 public byte[] encrypt(String password) {
  String encrypted_password = null;
  byte[] encrypted_pwd = null;

  try {
   // 以加密模式初始化密钥
   cipher.init(Cipher.ENCRYPT_MODE, theKey, IvParameters);

   // 加密前的密码(旧)
   byte[] plainttext = password.getBytes();

   // 加密密码
   encrypted_pwd = cipher.doFinal(plainttext);

   // 转成字符串,得到加密后的密码(新)
   encrypted_password = new String(encrypted_pwd);
  } catch (Exception ex) {
   // 记录加密错误
  }
  return encrypted_pwd;
 }

 /**
  * 解密算法
  *
  * @param password
  *            加过密的密码
  * @return 解密后的密码
  */
 public String decrypt(byte[] password) {
  String decrypted_password = null;
  try {
   // 以解密模式初始化密钥
   cipher.init(Cipher.DECRYPT_MODE, theKey, IvParameters);

   // 构造解密前的密码
   byte[] decryptedPassword = password;

   // 解密密码
   byte[] decrypted_pwd = cipher.doFinal(decryptedPassword);
   // 得到结果
   decrypted_password = new String(decrypted_pwd);
  } catch (Exception ex) {
   // 记录解密错误
  }
  return decrypted_password;
 }

 public static void main(String[] args) {
  EncryptData encryptData = new EncryptData();
  // System.out.println(.getBytes("GBK"),
  // "utf-8");

  byte[] aa = encryptData
    .encrypt("在网络中MD5是著名的不可逆算法,但是如果知道MD5的加密的字符串则可以通过自己的加密算法对明文进行加密,对加密后的密文与字符串匹配;匹配成功,表示找到明文;但是此程序的时间耗费较高!仅提供一个解密的方法!");

 }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值