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 }