• 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

     

     

  • 相关阅读:
    C# 随机生成姓名的方法
    Task 异步编程测试案例及基础应用说明
    C# 多线程 Parallel.For 和 For 谁的效率高?那么 Parallel.ForEach 和 ForEach 呢?
    C# SignalR 即时通信
    C#中out和ref之间的区别
    LInq之Take Skip TakeWhile SkipWhile Reverse Union Concat 用法
    C# LINQ 详解 From Where Select Group Into OrderBy Let Join
    JS 数组去重的几个方法
    attachEvent和addEventListener区别
    Event事件跨浏览器封装
  • 原文地址:https://www.cnblogs.com/yueli/p/7478670.html
Copyright © 2020-2023  润新知