• 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()));没有加入相应的盐,则会报错:算法错误;

    而加密算法中没有盐是可以进行加密的,解密中是不行的;
  • 相关阅读:
    创建类以及引用一个类
    修改hosts文件
    微信第三方登录接口开发
    Android定位
    Leetcode 102. Binary Tree Level Order Traversal
    Leetcode 725. Split Linked List in Parts
    Leetcode 445. Add Two Numbers II
    Leetcode 328. Odd Even Linked List
    Leetcode 237. Delete Node in a Linked List
    Leetcode 234. Palindrome Linked List
  • 原文地址:https://www.cnblogs.com/beppezhang/p/6555316.html
Copyright © 2020-2023  润新知