开发必备:多种语言实现AES加密解密示例保证数据安全传输与存储

开发必备:多种语言实现AES加密解密示例保证数据安全传输与存储在软件开发过程 为保证数据传输和存储安全 加密是一种重要的技术手段 其中 AES Advanced Encryption Standard 是一种常用的对称加密算法 它可以通过不同的模式和填充方式来满足不同的加密需求

欢迎大家来到IT世界,在知识的湖畔探索吧!

在软件开发过程,为保证数据传输和存储安全,加密是一种重要的技术手段。其中,AES(Advanced Encryption Standard)是一种常用的对称加密算法,它可以通过不同的模式和填充方式来满足不同的加密需求。

在本文中,我们将重点介绍 AES 加密算法的 ECB 模式和 PKCS5Padding 填充方式,以及如何在 Js、Java 、Python、Node.js等几种常用编程语言中实现加密和解密的过程。

  • ECB 模式ECB(Electronic Codebook)模式是最简单的 AES 加密模式之一。它将明文分割成固定大小的数据块,并对每个数据块分别进行加密。每个数据块之间是独立的,因此,相同的明文块将始终生成相同的密文块。
  • PKCS5Padding 填充方式一种常用的填充方式,用于将数据块调整为固定长度的倍数。在 AES 加密中,数据块长度通常为 128 位(16 字节),如果明文长度不是块长度的整数倍,就需要使用填充方式进行补位。例如,如果需要补位 5 个字节,就会使用值为 0x05 的字节进行填充。
开发必备:多种语言实现AES加密解密示例保证数据安全传输与存储

欢迎大家来到IT世界,在知识的湖畔探索吧!

JS版本

开发必备:多种语言实现AES加密解密示例保证数据安全传输与存储

在 JavaScript 中使用 CryptoJS 库进行 AES/ECB/PKCS5Padding 加密时,你可以按照以下方式进行操作:

通过 npm 安装 crypto-js:

npm install crypto-js

欢迎大家来到IT世界,在知识的湖畔探索吧!

示例代码:

欢迎大家来到IT世界,在知识的湖畔探索吧! import CryptoJS from 'crypto-js'; // 明文 const plaintext ='{"objectName":"test","pageNo":0,"pageSize":10}' // 密钥,用户自定义 const key = '23456'; function encrypt(data, key) { const sKey = CryptoJS.enc.Utf8.parse(key); const sContent = CryptoJS.enc.Utf8.parse(data); const encrypted = CryptoJS.AES.encrypt(sContent, sKey, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }) return encrypted.toString(); } function decrypt(data, key) { const sKey = CryptoJS.enc.Utf8.parse(key); const decrypt = CryptoJS.AES.decrypt(data, sKey, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }) return CryptoJS.enc.Utf8.stringify(decrypt).toString(); } const encrypted = encrypt(plaintext, key) console.log('加密:', encrypted); const decrypted = decrypt(encrypted, key) console.log('解密:', decrypted);

上述示例代码输出结果:

加密: Qo3E1B8ZR6Mry99RJm+h41hl/AFpFd6eczi//vidPdleezANZ+3T3DJsqEx3HhRu 解密: {"objectName":"test","pageNo":0,"pageSize":10}

Java版本

开发必备:多种语言实现AES加密解密示例保证数据安全传输与存储

在 Java 中,可以使用 javax.crypto 包中的 Cipher 类来实现 AES 加密和解密。

欢迎大家来到IT世界,在知识的湖畔探索吧!import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.util.Base64; public class AESUtil { private static final String AES_ALGORITHM = "AES"; private static final String AES_TRANSFORMATION = "AES/ECB/PKCS5Padding"; // 密钥,用户自定义 private static final String AES_KEY = "23456"; public static String encrypt(String plaintext) { try { SecretKeySpec secretKey = new SecretKeySpec(AES_KEY.getBytes(StandardCharsets.UTF_8), AES_ALGORITHM); Cipher cipher = Cipher.getInstance(AES_TRANSFORMATION); cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)); return Base64.getEncoder().encodeToString(encryptedBytes); } catch (Exception e) { e.printStackTrace(); } return null; } public static String decrypt(String encryptedText) { try { SecretKeySpec secretKey = new SecretKeySpec(AES_KEY.getBytes(StandardCharsets.UTF_8), AES_ALGORITHM); Cipher cipher = Cipher.getInstance(AES_TRANSFORMATION); cipher.init(Cipher.DECRYPT_MODE, secretKey); byte[] encryptedBytes = Base64.getDecoder().decode(encryptedText); byte[] decryptedBytes = cipher.doFinal(encryptedBytes); return new String(decryptedBytes, StandardCharsets.UTF_8); } catch (Exception e) { e.printStackTrace(); } return null; } public static void main(String[] args) throws Exception { // 明文 String plaintext = "{\"objectName\":\"test\",\"pageNo\":0,\"pageSize\":10}"; // AES 加密 String encryptedText = encrypt(plaintext); System.out.println("加密: " + encryptedText); // AES 解密 String decryptedText = decrypt(encryptedText); System.out.println("解密: " + decryptedText); // 解密前端密文,上述js版本AES加密生成 String decryptedText2 = "Qo3E1B8ZR6Mry99RJm+h41hl/AFpFd6eczi//vidPdleezANZ+3T3DJsqEx3HhRu"; System.out.println("解密前端密文: " + decryptedText2); } }

上述示例代码输出结果:

加密: Qo3E1B8ZR6Mry99RJm+h41hl/AFpFd6eczi//vidPdleezANZ+3T3DJsqEx3HhRu 解密: {"objectName":"test","pageNo":0,"pageSize":10} 解密前端密文: {"objectName":"test","pageNo":0,"pageSize":10}

Python版本

开发必备:多种语言实现AES加密解密示例保证数据安全传输与存储

在 Python 3 中,你可以使用 pycryptodome 库来进行 AES 算法的 ECB 模式和 PKCS5Padding 填充方式的加密和解密。

安装了 pycryptodome 库:

欢迎大家来到IT世界,在知识的湖畔探索吧!pip install pycryptodome

示例代码:

from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad import base64 # 密钥,用户自定义 key = '23456'; # 明文 plaintext ='{"objectName":"test","pageNo":0,"pageSize":10}' # 创建 AES 加密器和解密器 cipher = AES.new(key, AES.MODE_ECB) decipher = AES.new(key, AES.MODE_ECB) # 加密 encrypted_text = cipher.encrypt(pad(plaintext.encode('utf-8'), AES.block_size)) encrypted_text_base64 = base64.b64encode(encrypted_text).decode('utf-8') print('加密后的数据:', encrypted_text_base64) # 解密 decrypted_text = decipher.decrypt(base64.b64decode(encrypted_text_base64)) decrypted_text = unpad(decrypted_text, AES.block_size).decode('utf-8') print('解密后的数据:', decrypted_text)

Node.js版本

开发必备:多种语言实现AES加密解密示例保证数据安全传输与存储

在 Node.js 中,可以使用 crypto 模块来实现AES 算法的 ECB 模式和 PKCS5Padding 填充方式

欢迎大家来到IT世界,在知识的湖畔探索吧!const crypto = require('crypto'); function encrypt(text, key) { const cipher = crypto.createCipheriv('aes-128-ecb', key, ''); cipher.setAutoPadding(true); let encrypted = cipher.update(text, 'utf8', 'base64'); encrypted += cipher.final('base64'); return encrypted; } function decrypt(encryptedText, key) { const decipher = crypto.createDecipheriv('aes-128-ecb', key, ''); decipher.setAutoPadding(true); let decrypted = decipher.update(encryptedText, 'base64', 'utf8'); decrypted += decipher.final('utf8'); return decrypted; } // 明文 const plaintext ='{"objectName":"test","pageNo":0,"pageSize":10}' // 密钥,用户自定义 const key = '23456'; const encrypted = encrypt(plaintext, key) console.log('加密:', encrypted); const decrypted = decrypt(encrypted, key) console.log('解密:', decrypted); // 解密前端密文,上述js版本AES加密生成 const decrypted2 = 'Qo3E1B8ZR6Mry99RJm+h41hl/AFpFd6eczi//vidPdleezANZ+3T3DJsqEx3HhRu' console.log('解密前端密文:', decrypt(decrypted2)); 

欢迎点赞+关注,查看后续更多精彩内容!!!


免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/83388.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信