首页 > 其他分享 >前后端数据的交互--如何实现数据加密?--02

前后端数据的交互--如何实现数据加密?--02

时间:2024-07-30 18:52:03浏览次数:7  
标签:02 AES 加密 -- encrypted key text password

数据加密是保护数据安全的重要手段,通过加密技术,我们可以确保即使数据被窃取,也无法直接读取其中的信息。本文将介绍三种常见的加密方法:对称加密、非对称加密以及数据库加密,并展示如何在实际项目中实现这些加密技术。

1. 对称加密

对称加密算法使用相同的密钥进行加密和解密。AES(Advanced Encryption Standard)是目前最广泛使用的对称加密算法之一。

如何实现对称加密

以下是一个使用 AES 进行对称加密和解密的示例,采用 Python 语言和 pycryptodome 库:

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
import base64

def pad(s):
    return s + (AES.block_size - len(s) % AES.block_size) * chr(AES.block_size - len(s) % AES.block_size)

def unpad(s):
    return s[:-ord(s[len(s) - 1:])]

def encrypt(plain_text, key):
    key = key.encode('utf-8')
    plain_text = pad(plain_text).encode('utf-8')
    iv = get_random_bytes(AES.block_size)
    cipher = AES.new(key, AES.MODE_CBC, iv)
    encrypted_text = cipher.encrypt(plain_text)
    return base64.b64encode(iv + encrypted_text).decode('utf-8')

def decrypt(encrypted_text, key):
    key = key.encode('utf-8')
    encrypted_text = base64.b64decode(encrypted_text)
    iv = encrypted_text[:AES.block_size]
    cipher = AES.new(key, AES.MODE_CBC, iv)
    plain_text = cipher.decrypt(encrypted_text[AES.block_size:])
    return unpad(plain_text).decode('utf-8')

key = "thisisaverysecurekey123"
plain_text = "Sensitive Data"

# 加密
encrypted_text = encrypt(plain_text, key)
print(f"Encrypted Text: {encrypted_text}")

# 解密
decrypted_text = decrypt(encrypted_text, key)
print(f"Decrypted Text: {decrypted_text}")

 

解释

  • 填充:因为 AES 是块加密算法,明文长度需要是块大小的倍数,所以需要填充。
  • IV(初始化向量):确保每次加密相同的明文时生成不同的密文。
  • 加密和解密:使用相同的密钥进行加密和解密。

2. 非对称加密

非对称加密使用一对密钥:公钥和私钥。公钥用于加密,私钥用于解密。RSA(Rivest-Shamir-Adleman)是最常见的非对称加密算法之一。

如何实现非对称加密

以下是一个使用 RSA 进行非对称加密和解密的示例,采用 Python 语言和 pycryptodome 库:

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import base64

# 生成 RSA 密钥对
key = RSA.generate(2048)
private_key = key.export_key()
public_key = key.publickey().export_key()

def encrypt(plain_text, public_key):
    public_key = RSA.import_key(public_key)
    cipher = PKCS1_OAEP.new(public_key)
    encrypted_text = cipher.encrypt(plain_text.encode('utf-8'))
    return base64.b64encode(encrypted_text).decode('utf-8')

def decrypt(encrypted_text, private_key):
    private_key = RSA.import_key(private_key)
    encrypted_text = base64.b64decode(encrypted_text)
    cipher = PKCS1_OAEP.new(private_key)
    plain_text = cipher.decrypt(encrypted_text)
    return plain_text.decode('utf-8')

plain_text = "Sensitive Data"

# 加密
encrypted_text = encrypt(plain_text, public_key)
print(f"Encrypted Text: {encrypted_text}")

# 解密
decrypted_text = decrypt(encrypted_text, private_key)
print(f"Decrypted Text: {decrypted_text}")

 

解释

  • 密钥生成:生成一对 RSA 密钥,公钥用于加密,私钥用于解密。
  • 加密和解密:使用公钥进行加密,私钥进行解密,确保数据传输的安全性。

3. 数据库加密

数据库加密用于保护存储在数据库中的敏感数据,如用户密码、信用卡信息等。通常,密码需要使用哈希算法进行存储,以确保即使数据库泄露,也无法直接获取用户密码。

如何实现数据库加密

以下是一个使用 bcrypt 进行密码哈希和验证的示例,采用 Python 语言和 bcrypt 库:

import bcrypt

def hash_password(password):
    # 生成盐并哈希密码
    salt = bcrypt.gensalt()
    hashed_password = bcrypt.hashpw(password.encode('utf-8'), salt)
    return hashed_password

def check_password(password, hashed_password):
    # 验证密码
    return bcrypt.checkpw(password.encode('utf-8'), hashed_password)

password = "SecurePassword123"
hashed_password = hash_password(password)
print(f"Hashed Password: {hashed_password}")

# 验证密码
is_correct = check_password(password, hashed_password)
print(f"Password is correct: {is_correct}")

 

解释

  • 生成盐并哈希密码:使用 bcrypt.gensalt() 生成一个随机盐,并将其与密码一起进行哈希。
  • 验证密码:使用 bcrypt.checkpw() 验证输入的密码是否与存储的哈希密码匹配。

标签:02,AES,加密,--,encrypted,key,text,password
From: https://www.cnblogs.com/zx618/p/18333156

相关文章

  • 7月30日CSP-S模拟赛赛后总结
    7月30日模拟赛赛后总结\[7月30日\\模拟赛\\赛后总结\\2024年7月30日\\by\\\hcy\]洛谷同步:点我一、做题情况第一题比赛\(100pts\),赛后\(AC\)第二题比赛\(20pts\),赛后\(AC\)第三题比赛\(0pts\),赛后\(AC\)第四题比赛\(30pts\),赛后\(30pts\)......
  • 拿到登录数据以后如何处理?
    1.接收登录请求当用户提交登录请求时,前端将用户输入的用户名和密码发送到后端服务器。确保传输过程中的数据安全性至关重要。使用HTTPS确保所有的登录请求都通过HTTPS协议发送,以防止数据在传输过程中被窃取或篡改。//使用axios发送登录请求示例axios.post('https://y......
  • [POI2007] OSI-Axes of Symmetry 题解
    给出一个多边形,求对称轴数量。考虑对于一个多边形,其是对称的当且仅当对于若干个边(角),其左右的角与边都是对称的。考虑如果我们对于内角构造出一种单射,映射为一个整数,将边映射为它的边长,那么我们按照角,边,角,边,……的顺序将他们加入数组中,能构造出一个长度为\(2n\)的数组,将这个......
  • Java解压rar5兼容rar4
    RAR文件格式由WinRAR开发,广泛用于文件压缩和归档。随着技术的发展,RAR5作为更新的版本,引入了多项改进以提高压缩效率和数据安全性。压缩效率:RAR5通过增大字典大小至32MB,相较于RAR4的4MB,能够更有效地找到数据中的重复模式,从而提高压缩率,特别是在处理大型文件时。安全......
  • ofd轻阅读超大文件优化方案
    本人使用Typescript开发了一款ofd阅读器,参见文章《ofd轻阅读》。web端实现阅读功能有两种方案: ofd转svg;使用h5canvas。两种方案各有优劣,本人采用了canvas方案,劣势:开发难点较大,需要处理更多的细节(比如:文字选中)。优势:对细节掌控能力更强,能满足用户更苛刻的需求。打开超大文件......
  • 7.30模考总结
    省流:上300了(模考难度不大,橙黄绿蓝)\(7.30\)晴\(T1\)报数游戏Ⅱ题意简述求在一段序列前加入一个最小的正整数,使这个序列的每一个前缀和都为正数。思路:前缀和扫一遍,找最小前缀和,特判为正数的情况。\(code\)#pragmaG++optimize(3,"Ofast","inline")#pragmaG++optim......
  • <<构建之法-现代软件工程>>读后感
    <<构建之法-现代软件工程>>读后感在暑假的第一个月,我读了这本构建之法,对我启发颇多.起初我以为这是一本名著,在真当我接触它之后,这原来是一本软件工程的教材书,构建之法主要介绍了软件工程的相关知识,涵盖了软件开发的多个方面。这本书强调通过实践来学习软件工程的理念。我迫......
  • 前后端数据的交互--如何确保前后端数据的安全性?
     随着互联网的发展,前后端分离的架构在现代web开发中越来越流行。然而,数据安全性始终是一个重要的问题。在前后端分离的架构中,数据在前端和后端之间的传输和处理过程中需要采取有效的安全措施,以确保数据的机密性、完整性和可用性。本文将介绍一些常见的方法和最佳实践,以帮助确......
  • 笔记:从Aurora 8b/10b 到Aurora 64b/66b (一):Aurora 8b/10b
    参考:https://www.xilinx.com/products/intellectual-property/aurora8b10b.html#documentationhttps://docs.amd.com/r/en-US/pg046-aurora-8b10bhttps://docs.amd.com/v/u/en-US/aurora_8b10b_ds797https://mp.weixin.qq.com/s/gT4QUgvoFF6UI0PAhfEPvQ补丁:Aurora系IP内部......
  • 从百川智能融资50亿来看国内大模型的发展前景
     7月25日,AI初创公司百川智能确认:已完成A轮融资,总融资金额达50亿元。A轮融资完成后,百川智能将以200亿元估值开启B轮融资。 从参与A轮投资的资方来看,有阿里、小米、腾讯、亚投资本、中金等头部大厂和市场化投资机构,也有北京市人工智能产业投资基金、上海人工智能产业投资基金......