• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    java 易懂易用的MD5加密(可直接运行)(2)
    程序全文如下: 
    复制代码 代码如下:

    package com.neusoft.test.util.crypt;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.net.URLDecoder;
    import java.net.URLEncoder;
    import java.security.MessageDigest;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.DESedeKeySpec;
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    /**
    * p>Title:加密解密测试/p>
    *
    * p>Description: 加密解密/p>
    *
    *p>Date : 2005-08-11/p>
    *
    * p>Copyright: Copyright (c) 2005 neusoft/p>
    *
    * p>Company: neusoft/p>
    *
    * @author mengk
    * @version 1.00
    *
    * p>------------------------------------------------------------/p>
    * p> 修改历史 /p>
    * p> 序号 日期 修改人 修改原因/p>
    * p> 1 /p>
    */
    public class Endecrypt {
    /**
    * 进行MD5加密
    * @param String 原始的SPKEY
    * @return byte[] 指定加密方式为md5后的byte[]
    */
    private byte[] md5(String strSrc)
    {
    byte[] returnByte = null;
    try
    {
    MessageDigest md5 = MessageDigest.getInstance("MD5");
    returnByte = md5.digest(strSrc.getBytes("GBK"));
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    return returnByte;
    }
    /**
    * 得到3-DES的密钥匙
    * 根据接口规范,密钥匙为24个字节,md5加密出来的是16个字节,因此后面补8个字节的0
    * @param String 原始的SPKEY
    * @return byte[] 指定加密方式为md5后的byte[]
    */
    private byte[] getEnKey(String spKey)
    {
    byte[] desKey=null;
    try
    {
    byte[] desKey1 = md5(spKey);
    desKey = new byte[24];
    int i = 0;
    while (i desKey1.length i 24) {
    desKey[i] = desKey1[i];
    i++;
    }
    if (i 24) {
    desKey[i] = 0;
    i++;
    }
    }
    catch(Exception e){
    e.printStackTrace();
    }
    return desKey;
    }
    /**
    * 3-DES加密
    * @param byte[] src 要进行3-DES加密的byte[]
    * @param byte[] enKey 3-DES加密密钥
    * @return byte[] 3-DES加密后的byte[]
    */
    public byte[] Encrypt(byte[] src,byte[] enKey)
    {
    byte[] encryptedData = null;
    try
    {
    DESedeKeySpec dks = new DESedeKeySpec(enKey);
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
    SecretKey key = keyFactory.generateSecret(dks);
    Cipher cipher = Cipher.getInstance("DESede");
    cipher.init(Cipher.ENCRYPT_MODE, key);
    encryptedData = cipher.doFinal(src);
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    return encryptedData;
    }
    /**
    * 对字符串进行Base64编码
    * @param byte[] src 要进行编码的字符
    *
    * @return String 进行编码后的字符串
    */
    public String getBase64Encode(byte[] src)
    {
    String requestValue="";
    try{
    BASE64Encoder base64en = new BASE64Encoder();
    requestValue=base64en.encode(src);
    //System.out.println(requestValue);
    }
    catch(Exception e){
    e.printStackTrace();
    }

    return requestValue;
    }
    /**
    * 去掉字符串的换行符号
    * base64编码3-DES的数据时,得到的字符串有换行符号
    * ,一定要去掉,否则uni-wise平台解析票根不会成功,
    * 提示“sp验证失败”。在开发的过程中,因为这个问题让我束手无策,
    * 一个朋友告诉我可以问联通要一段加密后 的文字,然后去和自己生成的字符串比较,
    * 这是个不错的调试方法。我最后比较发现我生成的字符串唯一不同的 是多了换行。
    * 我用c#语言也写了票根请求程序,没有发现这个问题。
    *
    */
    private String filter(String str)
    {
    String output = null;
    StringBuffer sb = new StringBuffer();
    for(int i = 0; i str.length(); i++)
    {
    int asc = str.charAt(i);
    if(asc != 10 asc != 13)
    sb.append(str.subSequence(i, i + 1));
    }
    output = new String(sb);
    return output;
    }
    /**
    * 对字符串进行URLDecoder.encode(strEncoding)编码
    * @param String src 要进行编码的字符串
    *
    * @return String 进行编码后的字符串
    */
    public String getURLEncode(String src)
    {
    String requestValue="";
    try{

    requestValue = URLEncoder.encode(src);
    }
    catch(Exception e){
    e.printStackTrace();
    }

    return requestValue;
    }
    /**
    * 3-DES加密
    * @param String src 要进行3-DES加密的String
    * @param String spkey分配的SPKEY
    * @return String 3-DES加密后的String
    */
    public String get3DESEncrypt(String src,String spkey)
    {
    String requestValue="";
    try{


    //得到3-DES的密钥匙
    byte[] enKey = getEnKey(spkey);
    //要进行3-DES加密的内容在进行\"UTF-16LE\"取字节
    byte[] src2 = src.getBytes("UTF-16LE");
    //进行3-DES加密后的内容的字节
    byte[] encryptedData = Encrypt(src2,enKey);


    //进行3-DES加密后的内容进行BASE64编码
    String base64String = getBase64Encode(encryptedData);
    //BASE64编码去除换行符后
    String base64Encrypt = filter(base64String);

    //对BASE64编码中的HTML控制码进行转义的过程
    requestValue=getURLEncode(base64Encrypt);
    //System.out.println(requestValue);
    }
    catch(Exception e){
    e.printStackTrace();
    }

    return requestValue;
    }
    /**
    * 对字符串进行URLDecoder.decode(strEncoding)解码
    * @param String src 要进行解码的字符串
    *
    * @return String 进行解码后的字符串
    */
    public String getURLDecoderdecode(String src)
    {
    String requestValue="";
    try{

    requestValue = URLDecoder.decode(src);
    }
    catch(Exception e){
    e.printStackTrace();
    }

    return requestValue;
    }
    /**
    *
    *进行3-DES解密(密钥匙等同于加密的密钥匙)。
    * @param byte[] src 要进行3-DES解密byte[]
    * @param String spkey分配的SPKEY
    * @return String 3-DES解密后的String
    */
    public String deCrypt(byte[] debase64,String spKey)
    {
    String strDe = null;
    Cipher cipher = null;
    try
    {
    cipher=Cipher.getInstance("DESede");
    byte[] key = getEnKey(spKey);
    DESedeKeySpec dks = new DESedeKeySpec(key);
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
    SecretKey sKey = keyFactory.generateSecret(dks);
    cipher.init(Cipher.DECRYPT_MODE, sKey);
    byte ciphertext[] = cipher.doFinal(debase64);
    strDe = new String(ciphertext,"UTF-16LE");
    }
    catch(Exception ex)
    {
    strDe = "";
    ex.printStackTrace();
    }
    return strDe;
    }
    /**
    * 3-DES解密
    * @param String src 要进行3-DES解密的String
    * @param String spkey分配的SPKEY
    * @return String 3-DES加密后的String
    */
    public String get3DESDecrypt(String src,String spkey)
    {
    String requestValue="";
    try{


    //得到3-DES的密钥匙

    //URLDecoder.decodeTML控制码进行转义的过程
    String URLValue=getURLDecoderdecode(src);

    //进行3-DES加密后的内容进行BASE64编码

    BASE64Decoder base64Decode = new BASE64Decoder();
    byte[] base64DValue = base64Decode.decodeBuffer(URLValue);

    //要进行3-DES加密的内容在进行\"UTF-16LE\"取字节
    requestValue = deCrypt(base64DValue,spkey);
    }
    catch(Exception e){
    e.printStackTrace();
    }
    return requestValue;
    }
    public static void main(String[] args) {
    Endecrypt test = new Endecrypt();
    String oldString = "毒素发";
    String SPKEY = "1234";
    System.out.println("1。分配的SPKEY为: "+SPKEY);
    System.out.println("2。的内容为: "+oldString);
    String reValue = test.get3DESEncrypt(oldString,SPKEY);
    reValue = reValue.trim().intern();
    System.out.println("进行3-DES加密后的内容: "+reValue);
    String reValue2 = test.get3DESDecrypt(reValue,SPKEY);
    System.out.println("进行3-DES解密后的内容: "+reValue2);
    }
    }

    您可能感兴趣的文章:
    • Java实现MD5加密及解密的代码实例分享
    • 分享Java常用几种加密算法(四种)
    • java常用工具类之DES和Base64加密解密类
    • java实现md5加密示例
    • Java生成MD5加密字符串代码实例
    • 兼容PHP和Java的des加密解密代码分享
    • java使用des加密解密示例分享
    • java实现MD5加密算法的实例代码
    • 使用java自带des加密算法实现文件加密和字符串加密
    • java自带的MessageDigest实现文本的md5加密算法
    • java易懂易用的MD5加密(可直接运行) (1)
    • 基于Java实现的Base64加密、解密原理代码
    • des加密解密JAVA与.NET互通实例
    • java实现的AES加密算法完整实例
    • Apache Commons DbUtils工具包使用介绍
    • Apache Commons fileUpload实现文件上传之一
    • Apache commons fileupload文件上传实例讲解
    • Apache Commons fileUpload文件上传多个示例分享
    • java利用Apache commons codec进行MD5加密,BASE64加密解密,执行系统命令
    上一篇:java易懂易用的MD5加密(可直接运行) (1)第1/2页
    下一篇:java 截取字符串(判断汉字)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    java 易懂易用的MD5加密(可直接运行)(2) java,易懂,易用的,易,用的,