• java 加解密


    以下介绍几种java的加密和解密技术:

    1:base64 加解密:使用的依赖 

    <dependency>
        <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.10</version>
        </dependency>

     加密代码:

    public String base64En(){
            Base64 base64 = new Base64();
            byte[] encode = base64.encode(NAME.getBytes());
            System.out.println(new String(encode));
            return new String(encode);
        }

    解密代码:

    public String base64De(String encodeStr){
            
            Base64 base64 = new Base64();
            byte[] decodeStr = base64.decodeBase64(encodeStr);
            System.out.println(new String(decodeStr));
            return new String(decodeStr);
        }

    2:MD5 摘要算法:md5摘要算法的主要应用场景:数据库中保存的用户的密码信息需要通过md5进行加密,然后和用户提交的 md5加密后的密码进行比较,如果一致则进行

    一致的业务处理,如果不一致则进行不一致的业务逻辑处理

    加密代码如下:

    public void MD5De() throws NoSuchAlgorithmException{
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            Base64 base64 = new Base64();
            byte[] name = md5.digest(NAME.getBytes());
            byte[] city = md5.digest(CITY.getBytes());
            String str1=base64.encodeBase64String(name);
            String str2=base64.encodeBase64String(city);
            if(str1.equals(str2)){
                System.out.println("两个结果相同");
            }else{
                System.out.println("两个结果不相同");
            }
        }

    3:AES加解密技术:

    高级加密标准(英语:Advanced Encryption Standard,缩写:AES),是一种区块加密标准;是DES的升级版本,DES使用的是56位秘钥,容易被破解;

    AES 有128  192  和 256位秘钥,并且用128位分组加密和解密数据,理论上是无法破解;

    加密算法代码:

    private static final String  NAME="this is beppe zhang";          //需要加密的内容
    private static final String  SALT="tttAAEUHRUIYR9UR33RB3G4###";   //盐  调用方只要知道相应的盐才能解密
    public byte[] aesEncode() throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException{
            //获取aes秘钥
            KeyGenerator generator = KeyGenerator.getInstance("AES");
            generator.init(128,new SecureRandom(SALT.getBytes()));//加盐
            SecretKey key = generator.generateKey();
            SecretKeySpec spec = new SecretKeySpec(key.getEncoded(), "AES");
            //创建密码器
            Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.ENCRYPT_MODE, spec);            //填充方式是 加密填充方式
            byte[] doFinal = cipher.doFinal(NAME.getBytes("utf-8"));
            return doFinal;
        }

    解密算法的代码如下:

    public String aesDecode(byte[] encodeStr) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException{
    		//获取aes秘钥
    		KeyGenerator generator = KeyGenerator.getInstance("AES");
    		generator.init(128,new SecureRandom(SALT.getBytes()));
    		SecretKey key = generator.generateKey();
    		SecretKeySpec spec = new SecretKeySpec(key.getEncoded(), "AES");
    		//
    		Cipher cipher = Cipher.getInstance("AES");
    		cipher.init(Cipher.DECRYPT_MODE, spec);
    		byte[] doFinal = cipher.doFinal(encodeStr);
    		return new String(doFinal);
    	}
    

    备注:

    如果在解密算法中:

    generator.init(128,new SecureRandom(SALT.getBytes()));没有加入相应的盐,则会报错:算法错误;

    而加密算法中没有盐是可以进行加密的,解密中是不行的;
  • 相关阅读:
    4月份学习计划
    windows下下载安装python、 pip、nose
    Windows下怎么搭建Python+Selenium的自动化环境
    pthon之异常、文件练习题
    python 元组 字符串 字典 列表嵌套练习题1
    硬件访问服务AIDL JNI 方式
    Android 加载图片优化(二) LruCache DiskLruCache
    Android 加载图片优化(一)
    ubuntu 下 4412烧写SuperBoot
    metro WCF
  • 原文地址:https://www.cnblogs.com/beppezhang/p/6555316.html
Copyright © 2020-2023  润新知