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()));没有加入相应的盐,则会报错:算法错误;
而加密算法中没有盐是可以进行加密的,解密中是不行的;