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

泊头市建设局官方网站南充 网站开发

泊头市建设局官方网站,南充 网站开发,湖南网站建设价格费用,济南城市建设集团有限公司网站#x1f4da; 对称加密算法解析#xff1a;DES、AES及其在pycryptodome 和 crypto-js 模块中的应用 #x1f5dd;️ DES 算法 算法原理 数据加密标准#xff08;DES#xff09;是一种对称密钥加密算法#xff0c;用于保护数据的安全。DES 使用一个 56 位的密钥进行加密… 对称加密算法解析DES、AES及其在pycryptodome 和 crypto-js 模块中的应用 ️ DES 算法 算法原理 数据加密标准DES是一种对称密钥加密算法用于保护数据的安全。DES 使用一个 56 位的密钥进行加密和解密将数据块分为 64 位的块进行处理。DES 是一种 Feistel 网络每个数据块经过 16 轮的处理其中包括置换和替换操作以实现加密。 主要原理 密钥调度将 64 位的密钥压缩成 56 位并通过循环左移生成 16 个子密钥。初始置换IP对输入数据块进行初始置换。轮函数每一轮包含扩展置换、S-盒替换、P-盒置换和异或操作。逆初始置换IP-1在所有轮处理完后对数据进行逆初始置换得到最终的密文。 Python 实现 使用 pycryptodome 库来实现 DES 加密和解密 from Crypto.Cipher import DES from Crypto.Util.Padding import pad, unpaddef des_encrypt_decrypt(data, key, mode):cipher DES.new(key, DES.MODE_ECB)if mode encrypt:# 填充数据至 DES 块大小padded_data pad(data.encode(utf-8), DES.block_size)encrypted_data cipher.encrypt(padded_data)return encrypted_dataelif mode decrypt:decrypted_data cipher.decrypt(data)unpadded_data unpad(decrypted_data, DES.block_size)return unpadded_data.decode(utf-8)else:raise ValueError(Invalid mode. Choose encrypt or decrypt.)# 示例 key b8bytekey # 8 字节的密钥 data Hello, DES! encrypted des_encrypt_decrypt(data, key, encrypt) decrypted des_encrypt_decrypt(encrypted, key, decrypt)print(Encrypted:, encrypted) print(Decrypted:, decrypted)输入输出示例: 输入: Hello, DES!, 密钥: b8bytekey输出: 加密结果: b\x9d\xc2\xa5\x16\x19\x1c\xf3\x8f解密结果: Hello, DES! JavaScript 实现使用 crypto-js 模块 const CryptoJS require(crypto-js);function desEncryptDecrypt(data, key, mode) {const keyHex CryptoJS.enc.Utf8.parse(key);if (mode encrypt) {const encrypted CryptoJS.DES.encrypt(data, keyHex, { mode: CryptoJS.mode.ECB });return encrypted.toString();} else if (mode decrypt) {const decrypted CryptoJS.DES.decrypt(data, keyHex, { mode: CryptoJS.mode.ECB });return decrypted.toString(CryptoJS.enc.Utf8);} else {throw new Error(Invalid mode. Choose encrypt or decrypt.);} }// 示例 const key 8bytekey; // 8 字节的密钥 const data Hello, DES!; const encrypted desEncryptDecrypt(data, key, encrypt); const decrypted desEncryptDecrypt(encrypted, key, decrypt);console.log(Encrypted:, encrypted); console.log(Decrypted:, decrypted);输入输出示例: 输入: Hello, DES!, 密钥: 8bytekey输出: 加密结果: 3B3d4a...bcd5 (加密的密文)解密结果: Hello, DES! AES 算法 算法原理 高级加密标准AES是对称密钥加密标准用于替代 DES。AES 支持 128 位、192 位和 256 位密钥长度并处理 128 位的块。AES 采用 10、12 或 14 轮的处理取决于密钥的长度。 主要原理 密钥扩展从原始密钥生成多个轮密钥。轮函数每轮包含字节替换SubBytes、行移位ShiftRows、列混淆MixColumns和轮密钥加AddRoundKey操作。最终轮不包括列混淆操作。 Python 实现 使用 pycryptodome 库来实现 AES 加密和解密 from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad import osdef aes_encrypt_decrypt(data, key, mode):cipher AES.new(key, AES.MODE_ECB)if mode encrypt:# 填充数据至 AES 块大小padded_data pad(data.encode(utf-8), AES.block_size)encrypted_data cipher.encrypt(padded_data)return encrypted_dataelif mode decrypt:decrypted_data cipher.decrypt(data)unpadded_data unpad(decrypted_data, AES.block_size)return unpadded_data.decode(utf-8)else:raise ValueError(Invalid mode. Choose encrypt or decrypt.)# 示例 key os.urandom(16) # 16 字节的密钥 data Hello, AES! encrypted aes_encrypt_decrypt(data, key, encrypt) decrypted aes_encrypt_decrypt(encrypted, key, decrypt)print(Encrypted:, encrypted) print(Decrypted:, decrypted)输入输出示例: 输入: Hello, AES!, 密钥: b...key... (随机生成)输出: 加密结果: b\x1f\x23\xfe...78解密结果: Hello, AES! JavaScript 实现使用 crypto-js 模块 const CryptoJS require(crypto-js);function aesEncryptDecrypt(data, key, mode) {const keyHex CryptoJS.enc.Hex.parse(key);if (mode encrypt) {const encrypted CryptoJS.AES.encrypt(data, keyHex, { mode: CryptoJS.mode.ECB });return encrypted.toString();} else if (mode decrypt) {const decrypted CryptoJS.AES.decrypt(data, keyHex, { mode: CryptoJS.mode.ECB });return decrypted.toString(CryptoJS.enc.Utf8);} else {throw new Error(Invalid mode. Choose encrypt or decrypt.);} }// 示例 const key CryptoJS.enc.Hex.parse(00112233445566778899aabbccddeeff); // 16 字节密钥 const data Hello, AES!; const encrypted aesEncryptDecrypt(data, key, encrypt); const decrypted aesEncryptDecrypt(encrypted, key, decrypt);console.log(Encrypted:, encrypted); console.log(Decrypted:, decrypted);输入输出示例: 输入: Hello, AES!, 密钥: 00112233445566778899aabbccddeeff输出: 加密结果: U2FsdGVkX1...7w (加密的密文)解密结果: Hello, AES! ️ 拓展用法 1. 加盐仅适用于 DES 和 AES Python 实现: from Crypto.Random import get_random_bytesdef aes_encrypt_with_salt(data, key, salt):key_with_salt key saltcipher AES.new(key_with_salt[:16], AES.MODE_ECB)padded_data pad(data.encode(utf-8), AES.block_size)encrypted_data cipher.encrypt(padded_data)return encrypted_data# 示例 key get_random_bytes(16) salt get_random_bytes(8) data Hello, AES with Salt! encrypted aes_encrypt_with_salt(data, key, salt)print(Encrypted with Salt:, encrypted)输入输出示例: 输入: Hello, AES with Salt!, 密钥: b... (随机生成), 盐值: b... (随机生成)输出: 加密结果: b\x12\x34\x56\x78...ef (加密的密文) 2. 哈希化密钥密钥衍生 Python 实现: from Crypto.Protocol.KDF import scryptdef derive_key(password, salt):return scrypt(password.encode(utf-8), salt, 16, N2**14, r8, p1)# 示例 password mysecretpassword salt get_random_bytes(16) derived_key derive_key(password, salt) print(Derived Key:, derived_key)**输入 输出示例**: 输入: 密码: mysecretpassword, 盐值: b... (随机生成)输出: 派生密钥: b... (派生的密钥) 3. 修改加密算法参数如填充方式 Python 实现: from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpaddef aes_encrypt_with_custom_padding(data, key, padding_length):cipher AES.new(key, AES.MODE_ECB)padded_data data.encode(utf-8) bytes([padding_length] * padding_length)encrypted_data cipher.encrypt(padded_data)return encrypted_data# 示例 key get_random_bytes(16) data Hello, Custom Padding! encrypted aes_encrypt_with_custom_padding(data, key, 16)print(Encrypted with Custom Padding:, encrypted)输入输出示例: 输入: Hello, Custom Padding!, 密钥: b... (随机生成), 填充长度: 16输出: 加密结果: b... (加密的密文) 4. 密钥扩展从较短密钥生成较长密钥 Python 实现: from Crypto.Hash import SHA256def extend_key(short_key):return SHA256.new(short_key).digest()# 示例 short_key bshortkey extended_key extend_key(short_key) print(Extended Key:, extended_key)输入输出示例: 输入: 短密钥: bshortkey输出: 扩展密钥: b... (扩展后的密钥) 5. 加密的哈希化加密后哈希化 Python 实现: from Crypto.Hash import SHA256def hash_after_encryption(encrypted_data):hash_object SHA256.new(dataencrypted_data)return hash_object.hexdigest()# 示例 data Hello, Hash after Encryption! encrypted aes_encrypt_decrypt(data, key, encrypt) hashed hash_after_encryption(encrypted)print(Hashed Encrypted Data:, hashed)输入输出示例: 输入: Hello, Hash after Encryption!, 加密数据: b...输出: 哈希值: d2d2d2d2d2...d2d2 以上示例展示了 DES 和 AES 对称加密算法的基本使用方法以及如何在 Python 和 JavaScript 中实现这些算法。此外还涵盖了一些拓展用法例如加盐、密钥衍生、修改加密算法参数等。这些方法为实际应用中的加密需求提供了丰富的解决方案。
http://www.yingshimen.cn/news/99547/

相关文章:

  • 安徽公路建设行业协会网站是哪个珠海做企业网站
  • 重庆忠县网站建设报价凡科轻站小程序制作平台
  • 做黑网站赚钱技巧推广服务商
  • 大数据网站建设精品ppt模板免费下载
  • 怎么给网站做网页快速网站开发介绍
  • 免费授权企业网站源码建设系统网站
  • 常用小网站十大高端网站设计
  • 网站流量不正常WordPress网站封装app教程
  • 一个域名多个网站怎么制作企业网站
  • wordpress页面编辑成2列想做个卷帘门百度优化网站
  • 公司网站的管理和维护网站开发兼容ie
  • 品牌型网站制作价格网站建设待遇
  • 本地做网站顺序wordpress 0day
  • 小朋友做安全教育的网站公众号平台小程序
  • 买卖信息网站装修找设计师要多少钱
  • 哪些网站做简历合适网站和域名有关系吗
  • 站长源码论坛北京网页制作培训学校
  • 河南建设银行处理违章网站什么网站是solr做的
  • 加强校园网站建设国外产品网站
  • 免费设计网站电子商务目前就业形势
  • 建站公司用的开源系统上海外企
  • 个人做 下载类网站网站导航设计法则
  • 库尔勒网站商城建设海宁网站网站建设
  • 网站开发目的设计品牌网站
  • 哈尔滨网站搜索优化公司宁波做网站哪家公司好
  • 网站后台上传图片脚本错误深圳制作小程序
  • 深圳创建网站怎样把自己做的网站放到网上
  • 电子商务网站开发基本流程手机网站样式代码
  • 网站开发有什么用房产网站做那个比较好
  • 免费开设网站关于网站开发的期刊