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

而加密算法中没有盐是可以进行加密的,解密中是不行的;

 

posted @ 2017-03-15 17:23  beppezhang  阅读(950)  评论(0编辑  收藏  举报