BCrypt 加密实现
Bcrypt百度百科: bcrypt,是一个跨平台的文件加密工具。由它加密的文件可在所有支持的操作系统和处理器上进行转移。它的口令必须是8至56个字符,并将在内部被转化为448位的密钥。
除了对您的数据进行加密,默认情况下,bcrypt 在删除数据之前将使用随机数据三次覆盖原始输入文件,以阻挠可能会获得您的计算机数据的人恢复数据的尝试。如果您不想使用此功能,可设定禁用此功能。
bcrypt 使用的是布鲁斯·施内尔在1993年发布的 Blowfish 加密算法。具体来说,bcrypt 使用保罗·柯切尔的算法实现。随 bcrypt 一起发布的源代码对原始版本作了略微改动。
简单的说,Bcrypt就是一款加密工具,可以比较方便地实现数据的加密工作。下面是使用Bcrypt对数据加密的一个简单的栗子:
1: 可以官网下载源码,网址:http://www.mindrot.org/projects/jBCrypt/
2: 使用列子
import java.util.HashMap;
import java.util.Map; import org.apache.commons.lang3.StringUtils;
/**
* Bcrypt encryption algorithm
* @author yue.li3
*
*/
public class BcryptCipher {
// generate salt seed
private static final int SALT_SEED = 12;
// the head fo salt
private static final String SALT_STARTSWITH = "$2a$12"; public static final String SALT_KEY = "salt"; public static final String CIPHER_KEY = "cipher"; /**
* Bcrypt encryption algorithm method
* @param encryptSource
* need to encrypt the string
* @return Map , two values in Map , salt and cipher
*/
public static Map<String, String> Bcrypt(final String encryptSource) {
String salt = BCrypt.gensalt(SALT_SEED);
Map<String, String> bcryptResult = Bcrypt(salt, encryptSource);
return bcryptResult;
}
/**
*
* @param salt encrypt salt, Must conform to the rules
* @param encryptSource
* @return
*/
public static Map<String, String> Bcrypt(final String salt, final String encryptSource) {
if (StringUtils.isBlank(encryptSource)) {
throw new RuntimeException("Bcrypt encrypt input params can not be empty");
} if (StringUtils.isBlank(salt) || salt.length() != 29) {
throw new RuntimeException("Salt can't be empty and length must be to 29");
}
if (!salt.startsWith(SALT_STARTSWITH)) {
throw new RuntimeException("Invalid salt version, salt version is $2a$12");
} String cipher = BCrypt.hashpw(encryptSource, salt);
Map<String, String> bcryptResult = new HashMap<String, String>();
bcryptResult.put(SALT_KEY, salt);
bcryptResult.put(CIPHER_KEY, cipher);
return bcryptResult;
} }
BCrypt 加密实现的更多相关文章
- laravel5的Bcrypt加密方式对系统保存密码的小结
laravel5文档介绍 //对 A 密码使用Bcrypt 加密 $password = Hash::make('secret'); //你也可直接使用 bcrypt 的 function $pass ...
- laravel5的Bcrypt加密方式对系统保存密码
laravel5文档介绍 //对 A 密码使用Bcrypt 加密 $password = Hash::make('mima'); //你也可直接使用 bcrypt 的 function $passwo ...
- Spring Security项目的搭建以及Spring Security的BCrypt加密
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- bcrypt 加密
关于 bcrypt:1.bcrypt是不可逆的加密算法,无法通过解密密文得到明文.2.bcrypt和其他对称或非对称加密方式不同的是,不是直接解密得到明文,也不是二次加密比较密文,而是把明文和存储的密 ...
- Java通过BCrypt加密
一.概述 在用户模块,对于用户密码的保护,通常都会进行加密.我们通常对密码进行加密,然后存放在数据库中,在用户进行登录的时候,将其输入的密码进行加密然后与数据库中存放的密文进行比较,以验证用户密码是否 ...
- 常用加密算法简单整理以及spring securiy使用bcrypt加密
一.哈希加密 1.md5加密 Message Digest Algorithm MD5(中文名为消息摘要算法第五版) https://baike.baidu.com/item/MD5/212708?f ...
- 使用BCrypt算法加密存储登录密码用法及好处
//导入import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; /** *使用BCrypt算法加密存储登录密码 ...
- Spring Security笔记:使用BCrypt算法加密存储登录密码
在前一节使用数据库进行用户认证(form login using database)里,我们学习了如何把“登录帐号.密码”存储在db中,但是密码都是明文存储的,显然不太讲究.这一节将学习如何使用spr ...
- 使用bcrypt进行用户密码加密的简单实现
Bcrypt百度百科: bcrypt,是一个跨平台的文件加密工具.由它加密的文件可在所有支持的操作系统和处理器上进行转移.它的口令必须是8至56个字符,并将在内部被转化为448位的密钥. 除了对您的数 ...
随机推荐
- linux常用命令系列
自己开始接触linux系统已经两年了,刚到现场进行系统维护的时候,只知道ls和cd命令,所以我被迫开始学习linux,虽然现在每天都在linux系统上进行一些操作,但是感觉自己半路出家一样:可能知道某 ...
- TCP/IP模型
TCP/IP是一组用在实现网络相互连接的通信协议,internet网络体系结构就是以TCP/IP为核心的. TCP/IP分成了四个层次 1.应用层 应用层对应与OSI参考模型的高层,为用户提供了所需要 ...
- PHP代码审计学习之命令执行漏洞挖掘及防御
[1]可能存在命令执行漏洞的函数: 00x1:常用的命令执行函数:exec.system.shell_exec.passthru 00x2:常用的函数处理函数:call_user_func.call_ ...
- Linux源码安装过程中选项—prefix的作用
源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install),具体的安装方法一般作者都会给出文档,这里主要讨论配置(configure).Configu ...
- ubuntu12.10更新源
ubuntu12.10更新源 2013-03-10 20:48:17| 分类: Linux |字号 订阅 不同的网络状况连接以下源的速度不同, 建议在添加前手动验证以下源的连接速度(ping下就 ...
- 【犀牛书笔记】JavaScript正则表达式的模式匹配
正则表达式,是一个描述字符模式的对象. JavaScript用RegExp类表示正则表达式 String和RegExp都定义了相关方法 原创文章,转载请注明:http://www.cnblogs.co ...
- 字符串的数字部分递增,如user00000001后面的数字部分递增+1
使用存储过程方式 bengin declare@namevarchar(50) set@name=(selectmax(right('user00000001',8<8是从后往前数,从1开始&g ...
- C++ 函数模板一(函数模板定义)
//函数模板定义--数据类型做参数 #include<iostream> using namespace std; /* 函数模板声明 1.函数模板定义由模板说明和函数定义组成,并且一个模 ...
- C语言编写的PHP框架--yaf入门编程
首先--添加dll,修改php.ini--不同的版本,不同的需求 其次,根据教程http://www.laruence.com/manual/tutorial.firstpage.html#tutor ...
- Redmin 一键安装
一.介绍 Redmine是用Ruby开发的基于web的项目管理软件,是用ROR框架开发的一套跨平台项目管理系统,据说是源于Basecamp的ror版而来,支持多种数据库,有不少自己独特的功能,例如提供 ...