当前位置: 首页 > news >正文

聊聊PBE算法

本文主要研究一下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 := 1000md5key, iv := getMd5DerivedKey(password, salt, keyObtentionIterations)encrypted, err := desEncrypt([]byte(message), md5key, iv)if err != nil {return "", err}result := encryptedif 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信息,在解密的时候能够正确解出明文
http://www.lryc.cn/news/147858.html

相关文章:

  • 用MFC打开外部程序
  • 基于全新电脑环境安装pytorch的GPU版本
  • [当前就业]2023年8月25日-计算机视觉就业现状分析
  • 虚拟化技术原理
  • opencv-答题卡识别判卷
  • 【Linux】基础IO
  • 【Go 基础篇】深入探索:Go语言中的二维数组
  • IntelliJ IDEA 2023.2.1使用Git时弹出“使用访问令牌登录”问题解决
  • 前端开发学习路线
  • 1、英飞凌-AURIX-TC297简介
  • Android 音频框架 基于android 12
  • 项目实践:类平面抓取点计算(占位,后面补充)
  • 中央空调秒变智能 青岛中弘P15面板式空调网关初体验
  • vue create -p dcloudio/uni-preset-vue my-project创建文件报错443
  • 本地电脑搭建Plex私人影音云盘教程,内网穿透实现远程访问
  • CI/CD 持续集成 持续交付
  • 《Go 语言第一课》课程学习笔记(十一)
  • C++--完全背包问题
  • 显示本地 IP 地址和相应的 QR 码,方便用户共享和访问网络信息
  • 为什么建议同时学多门编程语言
  • langchain agent
  • Zabbix下载安装及SNMP Get使用
  • freee Programming Contest 2023(AtCoder Beginner Contest 310)
  • 恒运资本:概念股是什么意思
  • 十九、状态模式
  • MySQL用navicat工具对表进行筛选查找
  • 音视频 ffplay简单过滤器
  • 索引 事务 存储引擎
  • MySQL— 基础语法大全及操作演示!!!(事务)
  • xsschallenge1~13通关详细教程