精华内容
下载资源
问答
  • AES加密解密工具类

    2016-07-14 17:27:53
    AES加密解密工具类
  • Aes加密解密工具类

    2020-02-09 17:23:08
    AES自定义16位字符串我加密密码
  • AES加密解密 /** * @program: test * @description: AES 加密解密工具类 * @author: 闲走天涯 * @create: 2021-08-20 15:58 */ public class AESUtil { //秘钥 private static final String SECRET_KEY = ...

    AES 加密解密工具类

    RSA非对称加密算法:Java RSA非对称加密算法demo工具类 RSA加密解密.

    AES加密解密
    /**
     * @program: test
     * @description: AES 加密解密工具类
     * @author: 闲走天涯
     * @create: 2021-08-20 15:58
     */
    public class AESUtil {
    
        //秘钥
        private static final String SECRET_KEY = "wdesjqiw123oehs12sn32nv325w6q23vdf9g6h";
        //秘钥位数,限制秘钥长度为 16/32
        private static final Integer DIGIT = 32;
    
        /**
         * 加密
         * 1.构造密钥生成器
         * 2.根据ecnodeRules规则初始化密钥生成器
         * 3.产生密钥
         * 4.创建和初始化密码器
         * 5.内容加密
         * 6.返回字符串
         * @param encodeRules 秘钥
         * @param content 内容
         * @return
         */
        public static String AESEncode(String encodeRules,String content){
            try {
                //1.构造密钥生成器,指定为AES算法,不区分大小写
                KeyGenerator keygen=KeyGenerator.getInstance("AES");
                //2.根据ecnodeRules规则初始化密钥生成器
                //生成一个128位的随机源,根据传入的字节数组
                keygen.init(128, new SecureRandom(encodeRules.getBytes()));
                //3.产生原始对称密钥
                SecretKey original_key=keygen.generateKey();
                //4.获得原始对称密钥的字节数组
                byte [] raw=original_key.getEncoded();
                //5.根据字节数组生成AES密钥
                SecretKey key=new SecretKeySpec(raw, "AES");
                //6.根据指定算法AES自成密码器
                Cipher cipher=Cipher.getInstance("AES");
                //7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二个参数为使用的KEY
                cipher.init(Cipher.ENCRYPT_MODE, key);
                //8.获取加密内容的字节数组(这里要设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码
                byte [] byte_encode=content.getBytes("utf-8");
                //9.根据密码器的初始化方式--加密:将数据加密
                byte [] byte_AES=cipher.doFinal(byte_encode);
                //10.将加密后的数据转换为字符串
                //这里用Base64Encoder中会找不到包
                //解决办法:
                //在项目的Build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。
                String AES_encode=new String(new BASE64Encoder().encode(byte_AES));
                //11.将字符串返回
                return AES_encode;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 加密 第二种方式
         * @param encodeRules 秘钥
         * @param content 内容
         * @return
         */
        public static String AESEncode2(String encodeRules,String content){
            try {
                //拼接秘钥位数16/32
                encodeRules=getKeyByDigit(encodeRules,DIGIT);
                //生成AES密钥
                SecretKey key=new SecretKeySpec(encodeRules.getBytes(), "AES");
                //根据指定算法AES自成密码器
                Cipher cipher=Cipher.getInstance("AES");
                //初始化密码器,第一个参数为加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二个参数为使用的KEY
                cipher.init(Cipher.ENCRYPT_MODE, key);
                //获取加密内容的字节数组(这里要设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码
                byte [] byte_encode=content.getBytes("utf-8");
                //根据密码器的初始化方式--加密:将数据加密
                byte [] byte_AES=cipher.doFinal(byte_encode);
                //将加密后的数据转换为字符串
                //这里用Base64Encoder中会找不到包
                //解决办法:
                //在项目的Build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。
                String AES_encode=new String(new BASE64Encoder().encode(byte_AES));
                //将字符串返回
                return AES_encode;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 解密
         * 解密过程:
         * 1.同加密1-4步
         * 2.将加密后的字符串反纺成byte[]数组
         * 3.将加密内容解密
         * @param encodeRules 秘钥
         * @param encodeContent 密文
         * @return
         */
        public static String AESDncode(String encodeRules,String encodeContent){
            try {
                //1.构造密钥生成器,指定为AES算法,不区分大小写
                KeyGenerator keygen=KeyGenerator.getInstance("AES");
                //2.根据ecnodeRules规则初始化密钥生成器
                //生成一个128位的随机源,根据传入的字节数组
                keygen.init(128, new SecureRandom(encodeRules.getBytes()));
                //3.产生原始对称密钥
                SecretKey original_key=keygen.generateKey();
                //4.获得原始对称密钥的字节数组
                byte [] raw=original_key.getEncoded();
                //5.根据字节数组生成AES密钥
                SecretKey key=new SecretKeySpec(raw, "AES");
                //6.根据指定算法AES自成密码器
                Cipher cipher=Cipher.getInstance("AES");
                //7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密(Decrypt_mode)操作,第二个参数为使用的KEY
                cipher.init(Cipher.DECRYPT_MODE, key);
                //8.将加密并编码后的内容解码成字节数组
                byte [] byte_content= new BASE64Decoder().decodeBuffer(encodeContent);
                //解密
                byte [] byte_decode=cipher.doFinal(byte_content);
                //输出字符串
                String AES_decode=new String(byte_decode,"utf-8");
                return AES_decode;
            } catch (Exception e) {
                e.printStackTrace();
            }
            //如果有错就返加nulll
            return null;
        }
    
        /**
         * 解密 第二种方式
         * @param encodeRules 秘钥
         * @param encodeContent 密文
         * @return
         */
        public static String AESDncode2(String encodeRules,String encodeContent){
            try {
                //拼接秘钥位数16/32
                encodeRules=getKeyByDigit(encodeRules,DIGIT);
                SecretKey key=new SecretKeySpec(encodeRules.getBytes(), "AES");
                //根据指定算法AES自成密码器
                Cipher cipher=Cipher.getInstance("AES");
                //初始化密码器,第一个参数为加密(Encrypt_mode)或者解密(Decrypt_mode)操作,第二个参数为使用的KEY
                cipher.init(Cipher.DECRYPT_MODE, key);
                //将加密并编码后的内容解码成字节数组
                byte [] byte_content= new BASE64Decoder().decodeBuffer(encodeContent);
                //解密
                byte [] byte_decode=cipher.doFinal(byte_content);
                //输出字符串
                String AES_decode=new String(byte_decode,"utf-8");
                return AES_decode;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 控制密钥位数为16/32位
         * @param key
         * @return
         */
        public static String getKeyByDigit(String key,Integer digit){
            StringBuffer newKey = new StringBuffer();
            if(key.length()>digit){
                newKey.append(key.substring(0,digit));
            }else if(key.length()<digit){
                newKey.append(key);
                for(int i=0;i<digit-key.length();i++){
                    newKey.append("1");
                }
            }else{
                newKey.append(key);
            }
            return newKey.toString();
        }
    
        public static void main(String[] args) {
            String content = "你好,中国";
            //加密
            String encode = AESUtil.AESEncode(SECRET_KEY,content);
            //解密
            String dncode = AESUtil.AESDncode(SECRET_KEY,encode);
            System.out.println("原文:"+content);
            System.out.println("加密后:"+encode);
            System.out.println("解密后:"+dncode);
            System.out.println("秘钥位数:"+SECRET_KEY.length()+",密文位数:"+encode.length());
        }
    }
    
    展开全文
  • Swift 实现的 RSA, AES 加密解密工具类.zip,rsa公钥/私钥生成,rsa,aes加密/解密,rsa sign/verify in swift with commoncrypto in ios and os x
  • Java AES 加密解密工具类

    千次阅读 2019-04-15 10:51:28
    一、Java AES 加密解密工具类 import java.util.Random; import java.util.UUID; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import ...

    maven 引入一个依赖

    <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.11</version>
    </dependency>

    一、Java AES 加密解密工具类

    import java.util.Random;
    import java.util.UUID;
    
    import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    
    import org.apache.commons.codec.binary.Base64;
    
    /**
     * AES 128bit 加密解密工具类
     */
    public class AesEncryptUtil {
    	//使用AES-128-CBC加密模式,key需要为16位,key和iv可以相同!
    	
    	/**
    	 * 加密方法
    	 * @param data  要加密的数据
    	 * @param key 加密key
    	 * @param iv 加密iv
    	 * @return 加密的结果
    	 * @throws Exception
    	 */
    	public static String encrypt(String data, String key, String iv) throws Exception {
    		try {
    
    			Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");//"算法/模式/补码方式"
    			int blockSize = cipher.getBlockSize();
    
    			byte[] dataBytes = data.getBytes();
    			int plaintextLength = dataBytes.length;
    			if (plaintextLength % blockSize != 0) {
    				plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
    			}
    
    			byte[] plaintext = new byte[plaintextLength];
    			System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);
    
    			SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
    			IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
    
    			cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
    			byte[] encrypted = cipher.doFinal(plaintext);	// 加密
    
    			return new Base64().encodeToString(encrypted); 	//通过Base64转码返回
    
    		} catch (Exception e) {
    			e.printStackTrace();
    			return null;
    		}
    	}
    
    	/**
    	 * 解密方法
    	 * @param data 要解密的数据
    	 * @param key  解密key
    	 * @param iv 解密iv
    	 * @return 解密的结果
    	 * @throws Exception
    	 */
    	public static String desEncrypt(String data, String key, String iv) throws Exception {
    		try {
    			byte[] encrypted1 = new Base64().decode(data);
    
    			Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
    			SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
    			IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
    
    			cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec); //使用密钥初始化,设置为解密模式
    
    			byte[] original = cipher.doFinal(encrypted1);	//执行操作
    			String originalString = new String(original);
    			return originalString;
    		} catch (Exception e) {
    			e.printStackTrace();
    			return null;
    		}
    	}
    	
    	/**
    	  *   用于生成一组16位随机数 key
    	 * @return
    	 */
    	public static String getRandomStringKey() {
    		int hashCodeValue = UUID.randomUUID().hashCode();
    		if(hashCodeValue < 0) hashCodeValue = -hashCodeValue;
    		return String.format("%016d",hashCodeValue);//左边补0,16位,进制(d,x)
    	}
    	
    	/**
    	  *   用于生成16位的随机数 iv
    	 * @return
    	 */
        public static String getRandomStringIv(){
    		String base = "abcdefghijklmnopqrstuvwxyz0123456789";   
    		Random random=new Random();
    		StringBuffer key = new StringBuffer();
    		for(int i=0;i<16;i++){ 
    			int keyNumber = random.nextInt(base.length());   
    			key.append(base.charAt(keyNumber));
    		}  
    		return key.toString();
    	}
    	
    	
    	/**
    	* 测试
    	*/
    	public static void main(String args[]) throws Exception {
    		String data = "admin123";
    		String key = getRandomStringKey();
    		String iv = getRandomStringIv();
    
    		String enData = encrypt(data, key, iv);
    
    		System.out.println(key);
    		System.out.println(iv);
    		System.out.println(enData);
    		System.out.println(desEncrypt(enData, key, iv));
    	}
    }

      

    展开全文
  • NULL 博文链接:https://ping2010.iteye.com/blog/1571524
  • AES是一种对称加密方式,加密解密同用一个Key,常用,不解释 package com.wr.park_toolkit.utils; import java.util.Properties; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec;...

    AES是一种对称加密方式,加密解密同用一个Key,常用类,不解释

    	package com.wr.park_toolkit.utils;
    	
    	import java.util.Properties;
    	
    	import javax.crypto.Cipher;
    	import javax.crypto.spec.IvParameterSpec;
    	import javax.crypto.spec.SecretKeySpec;
    	
    	import org.apache.tomcat.util.codec.binary.Base64;
    	import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
    	import org.springframework.boot.context.properties.EnableConfigurationProperties;
    	import org.springframework.core.io.ClassPathResource;
    	import org.springframework.web.bind.annotation.RestController;
    	
    	import com.wr.park_toolkit.config.ParkConfig;
    	
    	/**
    	 * aes加解密工具类
    	 * 
    	 * @author aran
    	 *
    	 */
    	
    	 
    	public class AESHelper {
    		
    		/**
    		 * 加密用的key,可以由26个字母和数字组成,使用AES-128-CBC加密模式,key需要为16位
    		 */
    		private static final String key;
    		static {
    			 YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
    				yaml.setResources(new ClassPathResource("application-dev.yml"));
    				Properties properties=yaml.getObject();
    				key = properties.getProperty("park.key");	
    		}
    		/**
    		 * 加密使用的向量,
    		 */
    		private static final String iv = "887288739999"; 
    		 
    		/**
    		 * 
    		 * @author aran
    		 * @Description AES算法加密明文
    		 * @param data 明文
    		 * @param key 秘钥
    		 * @param iv 偏移量 长度16
    		 * @return 密文
    		 * @throws Exception
    		 */
    		public static  String encryptByAES(String data) throws Exception{
    			try {
    				Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
    				int blockSize = cipher.getBlockSize();
    				byte[] dataBytes = data.getBytes();
    				int plaintextLength = dataBytes.length;
    				
    				if(plaintextLength % blockSize != 0) {
    					plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
    				}
    				
    				byte[] plaintext = new byte[plaintextLength];
    				System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);
    				
    				SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(),"AES");
    				// CBC模式,需要一个向量iv,可增加加密算法的强度
    				IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
    				
    				cipher.init(Cipher.ENCRYPT_MODE, keyspec,ivspec);
    				
    				byte[] encrypted = cipher.doFinal(plaintext);
    				
    				return AESHelper.encode(encrypted);
    			}catch(Exception e){
    				e.printStackTrace();
    				return null;
    			}
    		}
    		
    		/**
    		 * @author aran
    		 * @Description AES算法解密密文
    		 * @param data
    		 * @param key 秘钥,长度16
    		 * @param iv 偏移量,长度16		
    		 * @return 明文
    		 * @throws Exception
    		 */
    		public static String decryptAES(String data) throws Exception{
    			try {
    				//先用base64解密
    				byte[] encrypted = AESHelper.decode(data);
    				
    				Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
    				SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(),"AES");
    				
    				IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
    				
    				cipher.init(Cipher.DECRYPT_MODE,keyspec,ivspec);
    				
    				byte[] original = cipher.doFinal(encrypted);
    				String originalString = new String(original);
    				return originalString.trim();
    			} catch(Exception e) {
    				e.printStackTrace();
    				return null;
    			}
    		}
    		
    		/**
    		 * 编码
    		 * @param byteArray
    		 * @return
    		 */
    		public static String encode(byte[] byteArray) {
    			return new String(new Base64().encode(byteArray));
    		}
    		
    		public static byte[] decode(String base64EncodedStr) {
    			return new Base64().decode(base64EncodedStr);
    		}
    		
    		
    		public static void main(String[] args) throws Exception {
    			String data = "测试这一段abc9992";
    			System.out.println("加密之前的明文:" + data);
    			String encrypData = encryptByAES(data);
    			System.out.println("加密之后的密文为:" + encrypData);
    			String decryptData = decryptAES(encrypData);
    			System.out.println("解密后的明文为:" + decryptData);
    		}
    	}
    
    

    其中yml文件的内容见:[java工具类]MD5withRSA签名算法工具类 中的说明


    万物皆有裂痕,那是光着照进来的地方
    —— 莱昂纳德·科恩

    展开全文
  • JAVA AES加密解密工具类

    千次阅读 2019-06-12 12:13:52
    import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class AESUtil { ... private static final String KEY_AES = "AES"; public static String encrypt(String src, Stri...

     

    import javax.crypto.Cipher;
    import javax.crypto.spec.SecretKeySpec;
    
    public class AESUtil {
        
        private static final String KEY_AES = "AES";
    
        public static String encrypt(String src, String key) throws Exception {
            if (key == null || key.length() != 16) {
                throw new Exception("key不满足条件");
            }
            byte[] raw = key.getBytes();
            SecretKeySpec skeySpec = new SecretKeySpec(raw, KEY_AES);
            Cipher cipher = Cipher.getInstance(KEY_AES);
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
            byte[] encrypted = cipher.doFinal(src.getBytes());
            return byte2hex(encrypted);
        }
    
        public static String decrypt(String src, String key) throws Exception {
            if (key == null || key.length() != 16) {
                throw new Exception("key不满足条件");
            }
            byte[] raw = key.getBytes();
            SecretKeySpec skeySpec = new SecretKeySpec(raw, KEY_AES);
            Cipher cipher = Cipher.getInstance(KEY_AES);
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
            byte[] encrypted1 = hex2byte(src);
            byte[] original = cipher.doFinal(encrypted1);
            String originalString = new String(original);
            return originalString;
        }
    
        public static byte[] hex2byte(String strhex) {
            if (strhex == null) {
                return null;
            }
            int l = strhex.length();
            if (l % 2 == 1) {
                return null;
            }
            byte[] b = new byte[l / 2];
            for (int i = 0; i != l / 2; i++) {
                b[i] = (byte) Integer.parseInt(strhex.substring(i * 2, i * 2 + 2),
                        16);
            }
            return b;
        }
    
        public static String byte2hex(byte[] b) {
            StringBuilder hs = new StringBuilder();
            String stmp = "";
            for (int n = 0; n < b.length; n++) {
                stmp = (Integer.toHexString(b[n] & 0XFF));
                if (stmp.length() == 1) {
                    hs.append("0").append(stmp);
                } else {
                    hs.append(stmp);
                }
            }
            return hs.toString().toUpperCase();
        }
    
        public static void main(String[] args) throws Exception {
            String content = "testContext";
            System.out.println("原内容 = " + content);
            String encrypt = AESUtil.encrypt(content, "key_value_length");
            System.out.println("加密后 = " + encrypt);
            String decrypt = AESUtil.decrypt(encrypt, "key_value_length");
            System.out.println("解密后 = " + decrypt);
        }
    
    }

     

    展开全文
  • 情景:项目在涉及到账号注册和登陆时,遇到用户密码的加密和解密过程,网上不少加密算法如MD5加密算法、DES加密算法、Base64加密算法和AES加密算法等。 在此记录目前使用比较流行的AES加密算法 AES,高级加密标准...
  • 1.创建工具类AESUtil ... import org.apache.tomcat.util.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec;... * @desc AES 加密工具类 */ public class AESUtil { // 加密
  • public class AesUtils { private final static String IV = ""; //你的偏移量 private static final String CBC_PKCS5_PADDING = "AES/CBC/...//AES加密方式 CBC是工作模式 PKCS5Padding是填充模式 private...
  • * AES工具类 * * * 因为某些国家的进口管制限制,Java发布的运行环境包中的加解密有一定的限制。比如默认不允许256位密钥的AES解密,解决方法就是修改策略文件。 * 替换的文件:%JDK_HOME%\jre\lib\...
  • /** * ClassName: AesUtil * Description: Aes加密解密工具 * Author:hong * Date: 2021/3/25 */ public class AesUtil { /** * Field : Aes 加密解密秘钥 */ private final static String KEY = "F5gzZ0E/...
  • aes加密解密工具类,解决在linux服务加密解密异常问题。
  • } /** * AES加密 * @param content 待加密的内容 * @param encryptKey 加密密钥 * @return 加密后的byte[] * @throws Exception */ public static byte[] aesEncryptToBytes(String content, String encryptKey) ...
  • AES加密解密工具类

    2016-12-08 21:24:35
    AES 加密解密
  • AES加密工具类

    2018-03-20 17:08:47
    AES加密解密工具类,解决windows下和linux加密解密不同问题。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,828
精华内容 3,931
关键字:

aes加密解密工具类