Java常用的加密方式

1.BASE64

严格来说BASE64不算是加密,而是对其编码格式进行修改,使之变为不易被人识别的形式。在实际使用中,将密码加密并储存到数据库中,登录时取出存储的密码,进行解密

/*** @author Myriven* @date 2019/12/23 14:23* @description*/
/*BASE564加密*/
public class BASE64Demo {public static void main(String[] args) throws IOException {String broforePWD="password";System.out.println("加密前:"+broforePWD);String afterPWD = encryptBASE64(broforePWD.getBytes());System.out.println("加密后:"+afterPWD);byte[] bytes = decryptBASE64(afterPWD);System.out.println("解密后:"+new String(bytes));}/*加密*/public static String encryptBASE64(byte[] pwd){String  result= new BASE64Encoder().encodeBuffer(pwd);return result;}/*解密*/public static byte[] decryptBASE64(String pwd) throws IOException {byte[] bytes = new BASE64Decoder().decodeBuffer(pwd);return bytes;}
}

2.MD5

MD5加密全程是Message-Digest Algoorithm 5(信息-摘要算法),它对信息进行摘要采集,再通过一定的位运算,最终获取加密后的MD5字符串。
MD5加密属于不可逆加密,在实际使用中,将密码加密后存储到数据库中,在登录的时候将输入的密码获取到,再次通过该加密算法加密,与数据库中存储的进行比较判断密码输入的是否正确

MD5有哪些特点
  MD5加密的特点主要有以下几点:
  1、针对不同长度待加密的数据、字符串等等,其都可以返回一个固定长度的MD5加密字符串。(通常32位的16进制字符串);
  2、其加密过程几乎不可逆,除非维护一个庞大的Key-Value数据库来进行碰撞破解,否则几乎无法解开。
  3、运算简便,且可实现方式多样,通过一定的处理方式也可以避免碰撞算法的破解。
  4、对于一个固定的字符串。数字等等,MD5加密后的字符串是固定的,也就是说不管MD5加密多少次,都是同样的结果。

java自带的MD5加密

/*** @author Myriven* @date 2019/12/23 14:50* @description*/
/*md5加密*/
public class MD5Demo {public static void main(String[] args) throws NoSuchAlgorithmException {String pwd="password";// 生成一个MD5加密计算摘要MessageDigest md = MessageDigest.getInstance("MD5");// 计算md5函数md.update(pwd.getBytes());// digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值//一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方)System.out.println("JAVA自带md5加密==========>"+ new BigInteger(1, md.digest()).toString(16));}
}

spring自带的工具DigestUtils实现

DigestUtils.md5DigestAsHex("password".getBytes())

3.BCrypt

原文网址: https://www.cnblogs.com/xingzc/p/8624007.html

public class BCryptDemo {public static void main(String[] args) {String newPWD= "password";//加密String newPWD= BCrypt.hashpw(newPWD, BCrypt.gensalt());System.out.println("加密后:"+newPWD);//BCrypt.gensalt(12)表示加盐,gensalt中的参数决定了他的复杂性,默认是10String hashed2 = BCrypt.hashpw(password, BCrypt.gensalt(12));String candidate = "testpassword";//检查未加密的密码(candidate)是否与加密的密码一致,进行比较,如果相同返回trueif (BCrypt.checkpw(candidate,newPWD)){System.out.println("密码相同");}else{System.out.println("密码不同");}}
}

什么是加盐?

如果两个人或多个人的密码相同,加密后保存会得到相同的结果。破一个就可以破一片的密码。如果名为A的用户可以查看数据库,那么他可以观察到自己的密码和别人的密码加密后的结果都是一样,那么,别人用的和自己就是同一个密码,这样,就可以利用别人的身份登录了。
其实只要稍微混淆一下就能防范住了,这在加密术语中称为“加盐”。具体来说就是在原有材料(用户自定义密码)中加入其它成分(一般是用户自有且不变的因素),以此来增加系统复杂度。当这种盐和用户密码相结合后,再通过摘要处理,就能得到隐蔽性更强的摘要值。

Java加密的几种方式相关推荐

  1. SpringBoot 配置文件加密的两种方式

    SpringBoot配置文件加密的两种方式 jasypt使用方式 用法一: 1.Application.java上增加注解@EnableEncryptableProperties(jasypt-spr ...

  2. Java技术分享:升级所安装Java版本的两种方式

    在进行Java开发的时候我们可能会需要升级所安装的Java版本,那么你知道应该如何安装吗?小千今天就来给大家介绍两种方式. 一.卸载掉原本安装的Java,下载最新安装包安装即可. 这个步骤就不介绍了, ...

  3. Java操作Excel三种方式POI、Hutool、EasyExcel

    Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...

  4. java创建对象的五种方式

    java创建对象的五种方式 一.使用new关键字 二.使用clone方法 三.使用反序列化 四.使用反射 五.使用Unsafe 一.使用new关键字 如 User user=new User(); 执 ...

  5. Linux之Ubuntu20.04安装Java JDK8的两种方式

    Linux之Ubuntu20.04远程安装Java JDK8的两种方式 安装openjdk8 更新软件包列表: sudo apt-get update 安装openjdk-8-jdk: sudo ap ...

  6. java实现线程三种方式_详解三种java实现多线程的方式

    java中实现多线程的方法有两种:继承Thread类和实现runnable接口. 1.继承Thread类,重写父类run()方法 public class thread1 extends Thread ...

  7. Java循环的三种方式分享

    转自: Java循环的三种方式分享 下文笔者讲述java循环的三种方式分享,如下所示 一.while循环 while语法:while(循环条件){循环体}while关键字处理循环先判断循环条件当条件成 ...

  8. Java 创建对象的 6 种方式,总有一种适合你

    创建对象的 6 种方式 假设有个女朋友类: @Data @NoArgsConstructor @AllArgsConstructor class GirlFriend {private String ...

  9. 【java】之3种方式实现Object和Map之间的转换

    转载:[java]之3种方式实现Object和Map之间的转换 - 古越剑箫 - 博客园

  10. Java连接Oracle两种方式thin与oci区别

    Java连接Oracle两种方式thin与oci区别 前几天同事跑过来跟我说, 机房中的一台tomcat服务器跟oracle数据库机连接很慢,查看控制台中的hibernate日志, 基本上是一条sql ...

最新文章

  1. python stdout stderr 一起输出_Python捕获stdout/stderr并在看到outpu的同时记录到文件
  2. (0080)iOS开发之上传本地项目到github
  3. 浅谈手机网站优化的需要注意哪些事项?
  4. Intellij IDEA + Maven + Cucumber 项目 (三):简单解释RunCukesTest.java
  5. 09 / LiveVideoStack主编观察:有趣的灵魂是一面镜子
  6. 大数据入门笔记(三)
  7. leetcode 第 216 场周赛 整理
  8. redhat bash: yum: 未找到命令..._常用linux yum 命令和 vim命令,这几个要熟记
  9. 带你彻底搞懂高性能网络模式Reactor 和 Proactor
  10. HDU3068 回文串 Manacher算法
  11. 详解nodejs中express搭建权限管理系统
  12. 6选择内核启动项_Linux 2.6内核编译过程
  13. 给图片加边框源代码c语言,给图片加框的代码及效果
  14. 超小型模块:IDO-SOM2D01可应用于物联网智能网关等领域
  15. 模板学堂丨JumpServer安全运维审计大屏
  16. (已解决)INSTALL_FAILED_CONFLICTING_PROVIDER虚拟机安装失败错误
  17. Python3网络爬虫开发实战(第二版)
  18. python画彩色螺旋线图
  19. 唐山大地震:接近尸体
  20. 数据分析 | 岭回归与LASSO回归

热门文章

  1. 中文计算机语言编程优势,十种编程语言特点比较
  2. 北斗导航 | 基于奇偶矢量法的RAIM算法(附代码)
  3. window7安装虚拟机上网
  4. 打开软件后跳出服务器正在运行中,win10系统打开软件提示“服务器正在运行中”的操作步骤...
  5. 北京林业大学matlab公选课,【抛砖引玉】一学期结束分享一下部分公选课和通识课经验...
  6. 安卓+JAVA实例开发源码
  7. java中文手册下载,22年最新
  8. python random库 伪随机 随机抽数字 抽学号
  9. 数字信号处理《数字滤波器的MATLAB与FPGA实现》
  10. zul页面报org.xml.sax.SAXParseException