如何使用Java中的BouncyCastle API加密和加密密码?

  发布于 2023-01-29 13:02

我对密码学很新,我BouncyCasetle API用来加密密码并将其存储在数据库中.对于加密我使用SHA-1算法,我想盐密码,以防止它再次字典攻击.

任何帮助,将不胜感激.

1 个回答
  • 我建议使用基于密码的密钥派生函数而不是基本哈希函数.像这样的东西:

    // tuning parameters
    
    // these sizes are relatively arbitrary
    int seedBytes = 20;
    int hashBytes = 20;
    
    // increase iterations as high as your performance can tolerate
    // since this increases computational cost of password guessing
    // which should help security
    int iterations = 1000;
    
    // to save a new password:
    
    SecureRandom rng = new SecureRandom();
    byte[] salt = rng.generateSeed(seedBytes);
    
    Pkcs5S2ParametersGenerator kdf = new Pkcs5S2ParametersGenerator();
    kdf.init(passwordToSave.getBytes("UTF-8"), salt, iterations);
    
    byte[] hash =
        ((KeyParameter) kdf.generateDerivedMacParameters(8*hashBytes)).getKey();
    
    // now save salt and hash
    
    // to check a password, given the known previous salt and hash:
    
    kdf = new Pkcs5S2ParametersGenerator();
    kdf.init(passwordToCheck.getBytes("UTF-8"), salt, iterations);
    
    byte[] hashToCheck =
        ((KeyParameter) kdf.generateDerivedMacParameters(8*hashBytes)).getKey();
    
    // if the bytes of hashToCheck don't match the bytes of hash
    // that means the password is invalid
    

    2023-01-29 13:04 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有