• JAVA实现AES和MD5加密


    package test;
    
    import java.io.UnsupportedEncodingException;
    import java.security.InvalidKeyException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.security.SecureRandom;
    
    import javax.crypto.BadPaddingException;
    import javax.crypto.Cipher;
    import javax.crypto.IllegalBlockSizeException;
    import javax.crypto.KeyGenerator;
    import javax.crypto.NoSuchPaddingException;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;
    
    import sun.misc.BASE64Encoder;
    
    public class Test {
    
        public static void main(String[] args) {
            BASE64Encoder encode = new BASE64Encoder();
            String a = encode.encode(aesEncrypt("123456","123456"));
            String b = encode.encode(md5Encrypt("123456"));
            System.out.println(a);
            System.out.println(a.length());
            System.out.println(b);
            System.out.println(b.length());
        }
        
        /** 
         * AES加密 
         *  
         * @param content 需要加密的内容 
         * @param password  加密密码 
         * @return 
         */  
        public static byte[] aesEncrypt(String content, String password) {  
            try {
                //获取AES密钥生成器
                KeyGenerator kgen = KeyGenerator.getInstance("AES");  
                //使用用户提供的随机源初始化密钥生成器,密钥大小为128位。
                kgen.init(128, new SecureRandom(password.getBytes()));
                //生成密钥
                SecretKey secretKey = kgen.generateKey();
                //获取基本编码格式密钥,如果不支持编码则返回null
                byte[] enCodeFormat = secretKey.getEncoded();
                //根据给定的字节数组构造一个密钥
                SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
                //创建密码器 
                Cipher cipher = Cipher.getInstance("AES");
                //使用UTF-8将加密内容编码为byte序列
                byte[] byteContent = content.getBytes("utf-8"); 
                //用密钥初始化此密码器为加密模式的常量
                cipher.init(Cipher.ENCRYPT_MODE, key);
                //按单部分操作加密数据并返回
                return cipher.doFinal(byteContent);  
            } catch (NoSuchAlgorithmException e) {  
                e.printStackTrace();  
            } catch (NoSuchPaddingException e) {  
                e.printStackTrace();  
            } catch (InvalidKeyException e) {  
                e.printStackTrace();  
            } catch (UnsupportedEncodingException e) {  
                e.printStackTrace();  
            } catch (IllegalBlockSizeException e) {  
                e.printStackTrace();  
            } catch (BadPaddingException e) {  
                e.printStackTrace();  
            }  
            return null;  
        }
        
        public static byte[] md5Encrypt(String str){
            try {
                MessageDigest digest = MessageDigest.getInstance("Md5");
                return digest.digest(str.getBytes());
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
                return null;
            }
        }
    }

    MD5在论坛上、软件发布时经常用,是为了保证文件的正确性,防止一些人盗用程序,加些木马或者篡改版权,设计的一套验证系统。

    AES又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

    所以在网站进行密码加密的情况下推荐使用AES算法加密,虽然MD5使用较为广泛,但简单密码容易被碰撞破解。

  • 相关阅读:
    对于程序员来说,如何才能快速转行赶上大数据这辆高铁呢?
    大数据学习计划
    大数据学习详细路线
    大数据到底要怎么学习?
    大数据处理技术怎么学习呢?
    从零开始大数据学习路线
    大数据从入门到精通
    大数据学习路线
    8.【Spring Cloud Alibaba】配置管理-Nacos
    7.【Spring Cloud Alibaba】微服务的用户认证与授权
  • 原文地址:https://www.cnblogs.com/aotian/p/3830931.html
Copyright © 2020-2023  润新知