BCrypt 加密实现

  Bcrypt百度百科: bcrypt,是一个跨平台的文件加密工具。由它加密的文件可在所有支持的操作系统和处理器上进行转移。它的口令必须是8至56个字符,并将在内部被转化为448位的密钥。
  除了对您的数据进行加密,默认情况下,bcrypt 在删除数据之前将使用随机数据三次覆盖原始输入文件,以阻挠可能会获得您的计算机数据的人恢复数据的尝试。如果您不想使用此功能,可设定禁用此功能。
  bcrypt 使用的是布鲁斯·施内尔在1993年发布的 Blowfish 加密算法。具体来说,bcrypt 使用保罗·柯切尔的算法实现。随 bcrypt 一起发布的源代码对原始版本作了略微改动。
 

简单的说,Bcrypt就是一款加密工具,可以比较方便地实现数据的加密工作。下面是使用Bcrypt对数据加密的一个简单的栗子:

1: 可以官网下载源码,网址:http://www.mindrot.org/projects/jBCrypt/

2: 使用列子

 1 import java.util.HashMap;
 2 import java.util.Map;
 3 
 4 import org.apache.commons.lang3.StringUtils;
 5 /**
 6  * Bcrypt encryption algorithm
 7  * @author yue.li3
 8  *
 9  */
10 public class BcryptCipher {
11     // generate salt seed
12     private static final int SALT_SEED = 12;
13     // the head fo salt
14     private static final String SALT_STARTSWITH = "$2a$12";
15     
16     public static final String SALT_KEY = "salt";
17     
18     public static final String CIPHER_KEY = "cipher";
19     
20     /**
21      * Bcrypt encryption algorithm method
22      * @param encryptSource 
23      *                     need to encrypt the string
24      * @return Map , two values in Map , salt and cipher
25      */
26     public static Map<String, String> Bcrypt(final String encryptSource) {
27         String salt  = BCrypt.gensalt(SALT_SEED);
28         Map<String, String> bcryptResult = Bcrypt(salt, encryptSource);
29         return bcryptResult;
30     }
31     /**
32      * 
33      * @param salt encrypt salt, Must conform to the rules 
34      * @param encryptSource
35      * @return
36      */
37     public static Map<String, String> Bcrypt(final String salt, final String encryptSource) {
38         if (StringUtils.isBlank(encryptSource)) {
39             throw new RuntimeException("Bcrypt encrypt input params can not be empty");
40         }
41         
42         if (StringUtils.isBlank(salt) || salt.length() != 29) {
43             throw new RuntimeException("Salt can't be empty and length must be to 29");
44         }
45         if (!salt.startsWith(SALT_STARTSWITH)) {
46             throw new RuntimeException("Invalid salt version, salt version is $2a$12");
47         }
48         
49         String cipher = BCrypt.hashpw(encryptSource, salt);
50         Map<String, String> bcryptResult = new HashMap<String, String>();
51         bcryptResult.put(SALT_KEY, salt);
52         bcryptResult.put(CIPHER_KEY, cipher);
53         return bcryptResult;
54     }
55     
56 }
View Code

 

 

posted @ 2017-09-05 15:02  阅历笔记  阅读(741)  评论(0编辑  收藏  举报