Java密碼編譯演算法(DES,MD5)

來源:互聯網
上載者:User
import java.security.Security;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
public class DesEncode {

  private static String Algorithm="DES"; //定義 密碼編譯演算法,可用 DES,DESede,Blowfish

  private static boolean debug = false;

  static{
    Security.addProvider(new com.sun.crypto.provider.SunJCE());
  }

  //產生密鑰
  public static byte[] getKey() throws Exception{
    byte[] key = {-50, -46, -78, -69, -42, -86, -75, -64};
    if (debug) {
        System.out.println("產生密鑰:"+byte2hex(key));
    }
    return key;
  }

  //加密
  public static String encode(String input) throws Exception{
    SecretKey deskey = new javax.crypto.spec.SecretKeySpec(getKey(),Algorithm);
    if (debug){
        System.out.println("加密前的字串:"+input);
        System.out.println("加密前的二進串:"+byte2hex(input.getBytes()));
    }
    Cipher c1 = Cipher.getInstance(Algorithm);
    c1.init(Cipher.ENCRYPT_MODE,deskey);
    byte[] cipherByte=c1.doFinal(input.getBytes());
   
    if (debug)
      System.out.println("加密後的二進串:"+byte2hex(cipherByte));
    return byte2hex(cipherByte);
  }

  //解密
  public static String decode(String input) throws Exception{
    SecretKey deskey = new javax.crypto.spec.SecretKeySpec(getKey(),Algorithm);
    if (debug) {
        System.out.println("解密前的資訊:"+input);
    }
    
    Cipher c1 = Cipher.getInstance(Algorithm);
    c1.init(Cipher.DECRYPT_MODE,deskey);
    byte[] clearByte=c1.doFinal(hex2byte(input));
    if (debug){
      System.out.println("解密後的二進串:"+byte2hex(clearByte));
      System.out.println("解密後的字串:"+(new String(clearByte)));
    }
    return new String(clearByte);
  }

  //md5()資訊摘要, 無法復原
  public static String md5(String input) throws Exception{
    java.security.MessageDigest alg=java.security.MessageDigest.getInstance("MD5"); //or "SHA-1"
    if (debug){
      System.out.println("摘要前的二進串:"+byte2hex(input.getBytes()));
      System.out.println("摘要前的字串:"+input);
    }
    alg.update(input.getBytes());
    byte[] digest = alg.digest();
    if (debug)
      System.out.println("摘要後的二進串:"+byte2hex(digest));
    return byte2hex(digest);
  }

  //位元組碼轉換成16進位字串
  public 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進位字串轉換成位元組碼
  public static byte[] hex2byte(String h) {
    byte[] ret = new byte[h.length()/2];
    for(int i=0; i<ret.length; i++){
        ret[i] = Integer.decode("#"+h.substring(2*i, 2*i+2)).byteValue();
    }
    return ret;
  }

  public static void main(String[] args) throws Exception{
    debug = true;
    decode(encode("測試加密"));
    md5("haohao學習啊");
  }
}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.