美文网首页
聊聊PBE算法

聊聊PBE算法

作者: go4it | 来源:发表于2023-08-30 20:52 被阅读0次

本文主要研究一下PBE算法

PBE

PBE即Password Based Encryption,基于口令的加密,它是一种组合算法,即一般是哈希+对称算法,比如PBEWithMD5AndDES,就是用MD5做哈希,用DES做加解密,而其密钥则是口令+salt基于哈希函数计算而来

java示例

    public void testPBEWithIvParameter() throws NoSuchPaddingException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException, InvalidKeyException, InvalidKeySpecException {
        String algorithm = "PBEWithMD5AndDES";
        char[] passwd = "123456".toCharArray();
        PBEKeySpec pbeKeySpec = new PBEKeySpec(passwd);
        SecretKeyFactory kf = SecretKeyFactory.getInstance(algorithm);
        SecretKey key = kf.generateSecret(pbeKeySpec);

        byte[] salt = new byte[8];
        Random random = new Random();
        random.nextBytes(salt);

        Cipher cp = Cipher.getInstance(algorithm);

        IvParameterSpec iv = new IvParameterSpec(RandomUtil.randomBytes(16));
        PBEParameterSpec pbeParameterSpec = new PBEParameterSpec(salt, 1000, iv);

        cp.init(Cipher.ENCRYPT_MODE, key, pbeParameterSpec);

        byte[] data = "helloworld".getBytes(StandardCharsets.UTF_8);
        byte[] encrypted = cp.doFinal(data);

        System.out.println(Base64.encode(encrypted));

        Cipher cpDecrypt = Cipher.getInstance(algorithm);
        cpDecrypt.init(Cipher.DECRYPT_MODE, key, pbeParameterSpec);
        byte[] decryptBytes = cpDecrypt.doFinal(encrypted);
        System.out.println(new String(decryptBytes));
    }

几个参数,一个是口令,即passwd,一个是salt,随机盐值,一个是ivParameter

golang示例

func Encrypt(message string, password string, salt []byte) (string, error) {
    keyObtentionIterations := 1000
    md5key, iv := getMd5DerivedKey(password, salt, keyObtentionIterations)
    encrypted, err := desEncrypt([]byte(message), md5key, iv)
    if err != nil {
        return "", err
    }

    result := encrypted
    if includePlainIvInEncryptionResults() {
        result = append(iv, result...)
    }
    if includePlainSaltInEncryptionResults() {
        result = append(salt, result...)
    }
    
    return base64.StdEncoding.EncodeToString(result), nil
}

小结

  • PBE即Password Based Encryption,基于口令的加密,它是一种组合算法,即一般是哈希+对称算法,比如PBEWithMD5AndDES,就是用MD5做哈希,用DES做加解密,而其密钥则是口令+salt基于哈希函数计算而来
  • 当使用固定salt和不使用ivParameter的DES的时候,同一个值,每次加密生成的密文是一样的,而使用随机salt和随机iv的时候,每次生成的密文是不一样的,这个时候密文会包含随机的salt和iv信息,在解密的时候能够正确解出明文

相关文章

  • JAVA加解密14-对称加密算法-PBE算法

    一、简述PBE算法(Password Base Encryption,基于口令加密)算法是一种基于口令的加密算法。...

  • 2.4 PBE算法简介

    对称加密技术 - PBE系列 PBE加密跳出了DES和AES的加密模式,综合对称加密、信息摘要算法的优势,形成了一...

  • Java 加密算法

    一、消息摘要算法 二、Base64 对称加密算法 三、Des 对称加密算法 四、Aes 对称加密算法 五、Pbe ...

  • 加密算法

    对称加密算法 1、DES 2、3重DES 3、AES 4、PBE(Password Based Encryptio...

  • JAVA实现对称加密

    对称加密算法 加密密钥 = 解密密钥(完全对称的) 初等加密算法 DES3DES AES PBE IDEA 对称加...

  • 关于web请求接口签名想法及认证

    首先个人这里优先使用PBE对称算法及md5非对称算法 对称加密主要针对类似用户ID、订单号等类似敏感属性使用非对称...

  • Java安全编程:基于口令加密(PBE)

    安全 PBE 在之前的文章中曾讲到过DES加密算法,类似这种加密算法都有一个密钥,密钥的长度决定了加密的安全性,...

  • Java 对称加密算法 PBE

    PBE:Password-based encryption(基于密码加密)。其特点在于口令由用户自己掌管,不借助任...

  • 基于口令的密码(PBE)

    基于口令的密码(PBE) 基于口令的密码(Password Based Encryption,PBE)是一种基于口...

  • lol美测服pbe最新汉化方法

    总的有两个方式,一个不行看另外的 PBE汉化[https://www.lbwnb.net/tag/pbe%e6%b...

网友评论

      本文标题:聊聊PBE算法

      本文链接:https://www.haomeiwen.com/subject/lpyamdtx.html