DES加密

503 阅读1分钟

DES加密的模式

  • DES加密有很多模式,模式不同可能加密的结果也不相同往往是填充方式不对、或者编码不一致、或者选择加密解密模式(ECB,CBC,CTR,OFB,CFB,NCFB,NOFB)没有对应上造成。常见的填充模式有: 'pkcs5','pkcs7','iso10126','ansix923','zero' 类型,包括DES-ECB,DES-CBC,DES-CTR,DES-OFB,DES-CFB
  • Base64 android.util包下的和apach jar包下的base64 encodeString没有什么不同,android就用android.util.Base64,没必要导入java的import org.apache.commons.codec.binary.Base64

以下下代码两种加密模式

/**
 * 加密
 * @param datasource byte[]
 * @param password String
 * @return byte[]
 */
public static  byte[] encrypt(byte[] datasource, String password) {
    try{
        SecureRandom random = new SecureRandom();
        DESKeySpec desKey = new DESKeySpec(password.getBytes());
        //创建一个密匙工厂,然后用它把DESKeySpec转换成
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey securekey = keyFactory.generateSecret(desKey);
        //Cipher对象实际完成加密操作
        Cipher cipher = Cipher.getInstance("DES");
        //用密匙初始化Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, securekey, random);
        //现在,获取数据并加密
        //正式执行加密操作
        return cipher.doFinal(datasource);
    }catch(Throwable e){
        e.printStackTrace();
    }
    return null;
}    /**
 * 二维码加密
 * @param datasource byte[]
 * @param password String
 * @return byte[]
 */
public static  byte[] qrencrypt(byte[] datasource, String password) {
    try{
        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
        DESKeySpec desKeySpec = new DESKeySpec(password.getBytes());
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey securekey = keyFactory.generateSecret(desKeySpec);
        IvParameterSpec desKey = new IvParameterSpec(password.getBytes());
        //创建一个密匙工厂,然后用它把DESKeySpec转换成
        //Cipher对象实际完成加密操作
        //用密匙初始化Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, securekey, desKey);
        //现在,获取数据并加密
        //正式执行加密操作
        return cipher.doFinal(datasource);
    }catch(Throwable e){
        e.printStackTrace();
    }
    return null;
}