java内容加密解密代码!

package com.huateng.encryption;


import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class Encryption {

 private static final String Algorithm = "DESede"; // 定义 加密算法,可用
              // DES,DESede,Blowfish

 // keybyte为加密密钥,长度为24字节

 // src为被加密的数据缓冲区(源)

 private 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;

  // 失败返回null

 }

 // keybyte为加密密钥,长度为24字节

 // src为加密后的缓冲区

 private 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;

 }

 // 转换成十六进制字符串

 private static String byte2hex(byte[] b) {

  String hs = "";

  String stmp = "";

  for (int n = 0; n < b.length; n++) {

   stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));

   if (stmp.length() == 1)
    hs = hs + "0" + stmp;

   else
    hs = hs + stmp;

   //if (n < b.length - 1)
    //hs = hs + ":";

  }

  return hs.toUpperCase();

 }
 
 // 16进制表示的字符串转换成字节数组
 private static byte[] hex2byte( String s ) throws Exception {
  char c,c1;
  int x;
  if( s.length() %2 != 0 )
   throw new Exception( "密钥格式不正确" );
  byte [] ret=new byte[s.length()/2];
  
  for( int i=0;i<s.length();i++ ){
   c=s.charAt(i);c1=s.charAt(++i);
   if( !(c>='0' && c<='9' || c>='A' && c<='F' || c>='a' && c<='f' ))
    throw new Exception( "密钥格式不正确" );
   if( !(c1>='0' && c1<='9' || c1>='A' && c1<='F' || c1>='a' && c1<='f' ))
    throw new Exception( "密钥格式不正确" );
   x = Integer.decode( "0x"+c+c1 ).intValue();
   if( x>127 ){
    ret[i/2]=(byte)(x|0xffffff00);
   }else{
    ret[i/2]=(byte)(x);
   }
  }
  return ret;
 }
 
 public static String encrypt(String src) throws Exception{
  try{
      byte[] encoded = encryptMode(hex2byte(EncrypCons.DESEDEKEY), src.getBytes());
            return byte2hex(encoded);
  }catch(Exception ex){
   throw new Exception(ex.getMessage());
  }
 }
 
 public static String decrypt(String src) throws Exception {
    
  try{
   
   byte[] srcByte = hex2byte(src);
   
   byte[] decoded = decryptMode(hex2byte(EncrypCons.DESEDEKEY), srcByte);

      return new String(decoded);
   
  }catch(Exception ex){
   
   throw new Exception(ex.getMessage());
  }
 
 }

 public static void main(String[] args)

 {

//  // 添加新安全算法,如果用JCE就要把它添加进去
//  Security.addProvider(new com.sun.crypto.provider.SunJCE());
//
//
//       // 24字节的密钥
//
//  final byte[] keyBytes = EncrypCons.DESEDEKEY.getBytes();
//
//  String szSrc = "This is a 3DES test. 测试";
//
//  System.out.println("加密前的字符串:" + szSrc);
//
//  byte[] encoded = encryptMode(keyBytes, szSrc.getBytes());
//
//  System.out.println("加密后的字符串:" + new String(encoded));
//
//  byte[] srcBytes = decryptMode(keyBytes, encoded);
//
//  System.out.println("解密后的字符串:" + (new String(srcBytes)));
  try{
  
  String szSrc = "11";
  
  System.out.println("加密前的字符串:" + szSrc);
  
  String encoded = encrypt(szSrc);
  
  System.out.println("加密后的字符串:" + encoded);
  
  System.out.println("长度:" + encoded.length());
  
  String decoded = decrypt("27460C2B977058A3");
  System.out.println("解密后的字符串:" + (decoded));
  System.out.println("");
//  Calendar now = Calendar.getInstance();
//   int year =now.get(Calendar.YEAR);
//        int month = now.get(Calendar.MONTH)+1;
//        int day = now.get(Calendar.DAY_OF_MONTH)+1;
//       
//        String sYear = String.valueOf(year);
//       
//        String sMonth = String.valueOf(month);
//        if (month < 10 )
//              sMonth = "0"+sMonth;
//        String sDay = String.valueOf(day);
//        if (day < 10)
//                sDay = "0" + sDay;
//        if(day > 31){
//         sDay = "01";
//         if(month > 12){sMonth = "01"; year = year +1;}
//        }
//       
//  System.out.println(sYear+sMonth+sDay);
  }catch(Exception ex){
   
  }
 }

}

此算法是jdk内部自带的一个算法,希望能给大定一些小启示!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值