• 我开源了一个加密算法仓库,支持18种算法!登录注册业务可用!


    仓库地址

    仓库地址:https://github.com/palp1tate/go-crypto-guard

    欢迎starfork

    介绍

    此存储库包含用 Go 编写的全面的密码哈希库。该库支持多种哈希算法,它允许可定制的盐长度、迭代、键长度和算法选择。这个开源项目旨在为开发人员提供一个多功能的工具,用于安全的密码存储和验证。

    支持的算法:

    一些加密过后的密码格式与Django内置的加密算法格式相同:

    <algorithm>$<iterations>$<salt>$<hash>
    
    • 1

    其他可能的格式:

    <algorithm>$<hash>
    
    • 1

    安装

    go get -u github.com/palp1tate/go-crypto-guard 
    
    • 1

    用法

    SHA512

    // SHA512 使用 PBKDF2 和 SHA-512 对密码进行加密。
    // 它接受密码、盐长度、密钥长度和迭代次数作为输入。如果你传入一个无效的值,函数将采取默认值。
    // 它生成一个盐,使用 PBKDF2 和 SHA-512 派生一个密钥,并返回加密的密码。
    // 密码的格式:$$$
    //pbkdf2_sha512$100$40fde046f66c1d9e55b4435d$1fdd34c50a98e576b612d66be507f019
    
    password := "12345678"
    encodedPassword, _ := pwd.GenSHA512(password, 12, 16, 100)
    ok, _ := pwd.VerifySHA512(password, encodedPassword)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    SHA384、 SHA256、 SHA1、 Md5和 Argon2的用法与 SHA512相同.

    HMAC

    // HMAC 使用 HMAC 和 SHA-256 对密码进行加密。
    // 它接受密码和盐长度作为输入。
    // 它生成一个盐,使用盐和 SHA-256 计算密码的 HMAC,并返回加密的密码。
    // 密码的格式:$$
    //hmac$3bf4e2c1a9ed54575d0d1f937eb363ab$a6ed73f8fe48867db2bd58c69ebe6c0fb91ecdd8147c4352fecf018d07cb4f43
    
    password := "12345678"
    encodedPassword, _ := pwd.GenHMAC(password, 16)
    ok, _ := pwd.VerifyHMAC(password, encodedPassword)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    Bcrypt

    // Bcrypt 使用 Bcrypt 哈希函数对密码进行加密。
    // 它接受一个密码作为输入,使用 Bcrypt 的默认成本从密码生成一个哈希,并返回加密的密码。
    // 密码的格式:$
    //bcrypt$243261243130246769545174546869684f565835616a694a4e3578432e6e387a4c426451526932692e443067756758334a436d3532717365784e5661
    
    password := "12345678"
    encodedPassword, _ := pwd.GenBcrypt(password)
    ok, _ := pwd.VerifyBcrypt(password, encodedPassword)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    对 Blake2b、 Blake2s 的使用与对 Bcrypt 的使用相同.

    Scrypt

    // Scrypt 使用 Scrypt 密钥派生函数对密码进行加密。
    // 它接受一个密码、盐长度和密钥长度作为输入。
    // 它生成一个盐,使用 Scrypt 和提供的参数派生一个密钥,并返回加密的密码。
    // 密码的格式:$$
    //scrypt$679a0a3c8336a9ff36b809862e7d494c$c4cec5ca742fa984045457f76d217acf245f032251c6a3952c4d68e1cba4a488
    
    password := "12345678"
    encodedPassword, _ := pwd.GenScrypt(password, 16, 32)
    ok, _ := pwd.VerifyScrypt(password, encodedPassword)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    AES

    // AES 使用 AES 加密算法对密码进行加密。
    // 它接受一个密码和一个 AES 密钥作为输入。
    // 它从 AES 密钥创建一个新的密码块,对密码应用 PKCS7 填充,并使用 CBC 模式加密密码。它返回加密的密码。
    // 密码的格式:$
    // aes$BhV9oJiePwpsEwDWizJoCA==
    
    password := "12345678"
    //aes key的长度必须为32
    aesKey := "palpitateabcdefghijklmn123456789"
    encodedPassword, _ := pwd.GenAES(password, aesKey)
    ok, _ := pwd.VerifyAES(password, encodedPassword, aesKey)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    DES、ThreeDES、RC4和Blowfish的使用与Bcrypt相同,对于DES,desKey的长度必须为8。对于ThreeDES,threeDesKey的长度必须为24。rc4Key和BlowfishKey的长度没有限制,但对于Blowfish,密码的长度必须为8。

    RSA

    // GenRSAKey 生成一对 RSA 密钥并将它们保存到文件中。 
    // 它接受密钥的位数作为输入。推荐使用 2048 或 4096。 
    // 它生成一个私钥和一个公钥,并分别将它们写入 “privateKey.pem” 和 “publicKey.pem”。
    
    // RSA 使用 RSA 加密算法对密码进行加密。 
    // 它接受一个密码和公钥文件的路径作为输入。 
    // 它从文件中读取公钥,使用 RSA 和 PKCS1v15 填充对密码进行加密,并返回加密的密码。 
    // 密码的格式:$ 
    //rsa$3p1+X80iFIDtwtKOQFjXm+deyv+cxkEIbpXuwXcqbcCvean6zyWvcrogQtDj2MkYOE2ScHpARR93RYxs3y+RXetKAHhrDqWURYcyJwuTwShBmR4hz+3WkFzhqm44IgPdlgdt70uO7TXx6fj1WmUTsZpNDTF/WNdEUO7Rzc8wahYBcnMOnPgUXrnUCYRSX7OBjuLwThnd9FTgh8CdaqESHWh6UPgkj9xz3G2uRplx2Tae0Pbsk8vQTuJXsqT//Q8yoC+ELo+5S6wTE6H8AMBdgvJgNHzFDldQD8UsZ7Ta/u2uF/joHwBA6V6IS4+1ithspE9ceJZCBWo2Cj6fMIbvjg==
    
    // 在你可以加密密码之前,你必须先生成一对密钥。这个函数只能被调用一次,记住在验证密码时需要相同的密钥对。
    
    _ = pwd.GenRSAKey(2048)	//只需要执行一次就可以注释掉
    password := "12345678"
    encodedPassword, _ := pwd.GenRSA(password, "publicKey.pem")
    ok, _ := pwd.VerifyRSA(password, encodedPassword, "privateKey.pem")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    ECC

    // ECC 使用 ECC 加密算法对密码进行加密。
    // 它接受一个密码和一个私钥作为输入。
    // 它计算密码的 SHA-256 摘要,使用私钥对摘要进行签名,并返回加密的密码。
    // 密码的格式:$
    //ecc$BQOoQvBhRHKi9GsV0qpPiyMJ5hRwdiXlQL7CcMsPCo1GvIomtb8xzjNnmq7RNRWmS9AKXo+i0Cg4fmAdLeCN8w==
    
    
    password := "12345678"
    privateKey, _ := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
    encodedPassword, _ := pwd.GenECC(password, privateKey)
    publicKey := privateKey.PublicKey
    ok, _ := pwd.VerifyECC(password, encodedPassword publicKey)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    理解Spring Bean的创建过程和生命周期
    保研计网复习笔记:传输层
    软件测试什么样的技术才能拿20K薪资?
    Java项目:JSP在线地下停车场车库管理系统
    Git基础
    拉格朗日乘子法思路来源
    form表单的三种封装方法(Vue+ElementUI)
    shiro的会话管理器SessionManager
    第九周实验记录
    基础生态学名词解释
  • 原文地址:https://blog.csdn.net/m0_63230155/article/details/133364970