java加密解密类详解编程语言

主要是用于加密,加密是可逆的,可以加密也可以解密。

import java.security.NoSuchAlgorithmException; 
  
import javax.crypto.Cipher; 
import javax.crypto.NoSuchPaddingException; 
import javax.crypto.spec.IvParameterSpec; 
import javax.crypto.spec.SecretKeySpec; 
  
public class JiaMi { 
  
    private String iv = "feie91o96t2q2p0p"; 
    private IvParameterSpec ivspec; 
    private SecretKeySpec keyspec; 
    private Cipher cipher; 
      
    private String SecretKey = "8d0bfe2fb0311fd7"; 
      
    public JiaMi() 
    { 
        ivspec = new IvParameterSpec(iv.getBytes()); 
  
        keyspec = new SecretKeySpec(SecretKey.getBytes(), "AES"); 
          
        try { 
            cipher = Cipher.getInstance("AES/CBC/NoPadding"); 
        } catch (NoSuchAlgorithmException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } catch (NoSuchPaddingException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } 
    } 
      
    public byte[] encrypt(String text) throws Exception 
    { 
        if(text == null || text.length() == 0) 
            throw new Exception("Empty string"); 
          
        byte[] encrypted = null; 
  
        try { 
            cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); 
  
            encrypted = cipher.doFinal(padString(text).getBytes()); 
        } catch (Exception e) 
        {           
            throw new Exception("[encrypt] " + e.getMessage()); 
        } 
          
        return encrypted; 
    } 
      
    public byte[] decrypt(String code) throws Exception 
    { 
        if(code == null || code.length() == 0) 
            throw new Exception("Empty string"); 
          
        byte[] decrypted = null; 
  
        try { 
            cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec); 
              
            decrypted = cipher.doFinal(hexToBytes(code)); 
        } catch (Exception e) 
        { 
            throw new Exception("[decrypt] " + e.getMessage()); 
        } 
        return decrypted; 
    } 
      
  
      
    public static String bytesToHex(byte[] data) 
    { 
        if (data==null) 
        { 
            return null; 
        } 
          
        int len = data.length; 
        String str = ""; 
        for (int i=0; i<len; i++) { 
            if ((data[i]&0xFF)<16) 
                str = str + "0" + java.lang.Integer.toHexString(data[i]&0xFF); 
            else 
                str = str + java.lang.Integer.toHexString(data[i]&0xFF); 
        } 
        return str; 
    } 
      
          
    public static byte[] hexToBytes(String str) { 
        if (str==null) { 
            return null; 
        } else if (str.length() < 2) { 
            return null; 
        } else { 
            int len = str.length() / 2; 
            byte[] buffer = new byte[len]; 
            for (int i=0; i<len; i++) { 
                buffer[i] = (byte) Integer.parseInt(str.substring(i*2,i*2+2),16); 
            } 
            return buffer; 
        } 
    } 
      
      
  
    private static String padString(String source) 
    { 
      char paddingChar = ' '; 
      int size = 16; 
      int x = source.length() % size; 
      int padLength = size - x; 
  
      for (int i = 0; i < padLength; i++) 
      { 
          source += paddingChar; 
      } 
  
      return source; 
    } 
} 
//使用方法: 
//加密 
String      encrypted = JiaMi.bytesToHex(jm.encrypt("你要加密的内容")); 
//解密 
  
String decrypted = new String(JiaMi.decrypt(encrypted));

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/10685.html

(0)
上一篇 2021年7月19日 10:23
下一篇 2021年7月19日 10:23

相关推荐

发表回复

登录后才能评论