DesUtils 加解密类使用

/** * 加密解密类 */

import javax.crypto.Cipher;import java.security.Key;import java.text.SimpleDateFormat;import java.util.Date;

public class DesUtils {

/**     * 字符串默认键值     */    private static String strDefaultKey = "national";

/**     * 加密工具     */    private Cipher encryptCipher = null;

/**     * 解密工具     */    private Cipher decryptCipher = null;

/**     * 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[]     * hexStr2ByteArr(String strIn) 互为可逆的转换过程     *     * @param arrB 需要转换的byte数组     * @return 转换后的字符串     * @throws Exception 本方法不处理任何异常,所有异常全部抛出     */    public static String byteArr2HexStr(byte[] arrB) throws Exception {        int iLen = arrB.length;        // 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍        StringBuffer sb = new StringBuffer(iLen * 2);        for (int i = 0; i < iLen; i++) {            int intTmp = arrB[i];            // 把负数转换为正数            while (intTmp < 0) {                intTmp = intTmp + 256;            }            // 小于0F的数需要在前面补0            if (intTmp < 16) {                sb.append("0");            }            sb.append(Integer.toString(intTmp, 16));        }        return sb.toString();    }

/**     * 将表示16进制值的字符串转换为byte数组, 和public static String byteArr2HexStr(byte[] arrB)     * 互为可逆的转换过程     *     * @param strIn 需要转换的字符串     * @return 转换后的byte数组     * @throws Exception 本方法不处理任何异常,所有异常全部抛出     * @author <a href="mailto:[email protected]">LiGuoQing</a>     */    public static byte[] hexStr2ByteArr(String strIn) throws Exception {        byte[] arrB = strIn.getBytes();        int iLen = arrB.length;

// 两个字符表示一个字节,所以字节数组长度是字符串长度除以2        byte[] arrOut = new byte[iLen / 2];        for (int i = 0; i < iLen; i = i + 2) {            String strTmp = new String(arrB, i, 2);            arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);        }        return arrOut;    }

/**     * 默认构造方法,使用默认密钥     *     * @throws Exception     */    public DesUtils() throws Exception {        this(strDefaultKey);    }

/**     * 指定密钥构造方法     * 由指定的秘钥生成加密器和解密器     *     * @param strKey 指定的密钥     * @throws Exception     */    public DesUtils(String strKey) throws Exception {        Key key = getKey(strKey.getBytes());

encryptCipher = Cipher.getInstance("DES");        encryptCipher.init(Cipher.ENCRYPT_MODE, key);

decryptCipher = Cipher.getInstance("DES");        decryptCipher.init(Cipher.DECRYPT_MODE, key);    }

/**     * 加密字节数组     *     * @param arrB 需加密的字节数组     * @return 加密后的字节数组     * @throws Exception     */    public byte[] encrypt(byte[] arrB) throws Exception {        return encryptCipher.doFinal(arrB);    }

/**     * 加密字符串     *     * @param strIn 需加密的字符串     * @return 加密后的字符串     * @throws Exception     */    public String encrypt(String strIn) throws Exception {        return byteArr2HexStr(encrypt(strIn.getBytes()));    }

/**     * 解密字节数组     *     * @param arrB 需解密的字节数组     * @return 解密后的字节数组     * @throws Exception     */    public byte[] decrypt(byte[] arrB) throws Exception {        return decryptCipher.doFinal(arrB);    }

/**     * 解密字符串     *     * @param strIn 需解密的字符串     * @return 解密后的字符串     * @throws Exception     */    public String decrypt(String strIn) throws Exception {        return new String(decrypt(hexStr2ByteArr(strIn)));    }

/**     * 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位     *     * @param arrBTmp 构成该字符串的字节数组     * @return 生成的密钥     * @throws Exception     */    private Key getKey(byte[] arrBTmp) throws Exception {        // 创建一个空的8位字节数组(默认值为0)        byte[] arrB = new byte[8];

// 将原始字节数组转换为8位        for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {            arrB[i] = arrBTmp[i];        }

// 生成密钥        Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES");

return key;    }

/**     * 明文转密文     *     * @throws Exception     */    public static String password(String str) {        DesUtils des;        try {            if (str == null || str.trim().equals("")) return "";            des = new DesUtils("mmid");            String password = des.encrypt(str);            return password;        } catch (Exception e) {            return str;        }//自定义密钥    }

public static String password(String str, String key) throws Exception {        DesUtils des = new DesUtils(key);        String password = des.encrypt(str);        return password;    }

/**     * 密文转明文     *     * @throws Exception     */    public static String clear(String str) {        DesUtils des;        //自定义密钥        try {            des = new DesUtils("fgh");            String clear = des.decrypt(str);            return clear;        } catch (Exception e) {            return "";        }    }

public static String clear(String str, String key) {        // Decript de = new Decript();        //    String mmid =(String) de.getData().getMap().get("mmid");        String mmid = "fgh";        key = mmid;        DesUtils des = null;        try {            des = new DesUtils(key);        } catch (Exception e1) {            // TODO Auto-generated catch block            e1.printStackTrace();        }        String clear = null;        try {            clear = des.decrypt(str);        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return clear;    }

/**     * 购买产品时生成的产品密钥(主要作为广告查询工具密钥使用)     *     * @param userIdentifier-用户唯一编码(7位)     * @param key-0为官网购买,1为工具生成(1位)     * @param StaffIdentifier-员工编号(4位,默认8011,区分是在员工那里购买的)     * @param agencyIdentifier-代理编号(5位,默认10000,区分在代理那里购买的)     * @param discount-折扣(2位)     * @param buying-购买时间,换算成1,2,3天数     */    public static String createSecretKey(String userIdentifier, int key, int softwareType, String StaffIdentifier, String agencyIdentifier, String discount, int buying) {        String secretKey = null;        Date date = new Date();        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");        String nowtime = sdf.format(date);        secretKey = password(userIdentifier + key + softwareType + nowtime + StaffIdentifier + agencyIdentifier + discount + buying);        return secretKey;    }

public static String createSecretKey(String nickname,                                         Double preferentialPrice, String staffIdentifier, String type,                                         String date) {        StringBuffer secStr = new StringBuffer();        secStr.append(nickname).append(">")                .append(preferentialPrice.intValue()).append(">")                .append(staffIdentifier).append(">").append(type).append(">")                .append(date);        try {            DesUtils des = new DesUtils("driver");//       System.out.println(secStr);            String sec = des.encrypt(secStr.toString());//       System.out.println(sec);            return sec;        } catch (Exception e) {            e.printStackTrace();        }

return null;    }}

原文地址:https://www.cnblogs.com/fgh2018/p/9408701.html

时间: 2024-10-14 06:09:18

DesUtils 加解密类使用的相关文章

一个java的DES加解密类转换成C#

原文:一个java的DES加解密类转换成C# 一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //import java.util.regex.Pattern; //import java.util.Hashtable; import javax.crypto.*; import javax.crypto.spec.*; import sun.misc.*; /** * des加密解密 */ pu

PHP版3DES加解密类

<?php /** * * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容 * * @Author:蓝凤(ilanfeng.com) * * @version: V0.1 2011.02.18 * */ class Cc3des{ //加密的时候只用替换key就行了,ecb模式不需要提供iv值 public $key = "0123456789QWEQWEEWQQ1234"; public $iv = "33889955"

php rsa 非对称加解密类

<?php header("Content-Type: text/html;charset=utf-8"); /* 生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令: openssl genrsa -out rsa_private_key.pem 1024 #生成原始 RSA私钥文件 rsa_private_key.pem opens

【基础分享】C#封装的几个加解密类

前段时间一个业余项目涉及到字符串和文件的加密,所以写了封装了几个给予DES,AES,MD5的加密解密类. 直接看代码 DesSecurity.cs /// <summary> /// 基于DES加密解密 /// </summary> public static class DesSecurity { public static byte[] Encrypt( byte[] data ,string key , bool ispaddingzeros = true, bool isE

php des 对称加解密类

<?php header("Content-Type: text/html;charset=utf-8"); /** * des 对称加解密 */ class des { private $key = ''; private $cipher = MCRYPT_DES; //加解密算法 private $modes = MCRYPT_MODE_ECB; //算法模式 private $iv = ''; //初始化向量 /** * 密钥 */ public function __co

php opensll加解密类

<?php $pri = "-----BEGIN RSA PRIVATE KEY-----MIICXQIBAAKBgQCzJc4RrAqaH2Es02XQ91Cqp/JK0yX893JQwFT2eAusnwQ90BwuFQWdcZyKHP+I7XWMZc0qT/V/p51cq1d0OarPsuikth/43qP+1IWTYTv1i967pDnQjXKbnm1dEMvjmS5hi7b/WwNfTi/VdAGLN0nxiHlX4+czjNHA3pCSQ9hCzwIDAQABAoGAIF7aZ3

Base64 加解密类的使用

/** * Created by Administrator on 2017/12/2 0002. */import java.io.UnsupportedEncodingException; public class Base64 { /** * Chunk size per RFC 2045 section 6.8. * <p/> * <p>The {@value} character limit does not count the trailing CRLF, but co

超强php加解密扩展:cryptopp

cryptopp是一个用c++编写的超强加解密扩展.性能优异可靠.完全可以替换所有PHP编写的加解密类.不仅如此,它的提供的编程接口非常简明易用,可说是PHP程序员必备扩展. cryptopp扩展的接口如下: class cryptopp { public function __construct($param); public function setkey($param); public function encode($param); public function decode($par

Java 使用AES/CBC/PKCS7Padding 加解密字符串

介于java 不支持PKCS7Padding,只支持PKCS5Padding 但是PKCS7Padding 和 PKCS5Padding 没有什么区别要实现在java端用PKCS7Padding填充,需要用到bouncycastle组件来实现 所以需要一个jar 来支持.bcprov-jdk16-146.jar 下载地址:http://central.maven.org/maven2/org/bouncycastle/bcprov-jdk16/1.46/bcprov-jdk16-1.46.jar