RSA加密 AES加密 py c#

news/2024/9/20 15:55:27/文章来源:https://www.cnblogs.com/ives/p/17781121.html

网上提供的方案描述都不太清晰,主要需要注意的是Py中使用的是pkcs1标准,注意这一点即可

使用AES加密时候需要注意填充模式

py

import os
import uuid
import base64
import wmi
import json
from datetime import datetime
import randomimport rsa
import binascii
from rsa import transform, core
from binascii import b2a_hex, a2b_hexdef getAESRomdomKey():"""获取密钥 n 密钥长度:return:"""n = 16c_length = int(n)source = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'length = len(source) - 1result = ''for i in range(c_length):result += source[random.randint(0, length)]return resultdef add_to_16(text):"""明文使用PKCS7填充最终调用AES加密方法时,传入的是一个byte数组,要求是16的整数倍,因此需要对明文进行处理:param text: 待加密内容(明文):return:"""bs = AES.block_size  # 16length = len(text)bytes_length = len(bytes(text, encoding='utf-8'))# tips:utf-8编码时,英文占1个byte,而中文占3个bytepadding_size = length if(bytes_length == length) else bytes_lengthpadding = bs - padding_size % bs# tips:chr(padding)看与其它语言的约定,有的会使用'\0'padding_text = chr(padding) * padding# print(text + padding_text)return (text + padding_text).encode('utf-8')def aes_ECB_Encrypt(text, key):  # ECB模式的加密函数,data为明文,key为16字节密钥key = key.encode('utf-8')mode = AES.MODE_ECBtext = add_to_16(text)cryptos = AES.new(key, mode)cipher_text = cryptos.encrypt(text)# return b2a_hex(cipher_text)result = base64.b64encode(cipher_text).decode('utf8')return resultdef aes_ECB_Decrypt(text, key):  # ECB模式的解密函数,data为密文,key为16字节密钥key = key.encode('utf-8')# key = base64.b64decode(key.encode('utf-8'))mode = AES.MODE_ECBcryptor = AES.new(key, mode)# plain_text = cryptor.decrypt(a2b_hex(text))plain_text = cryptor.decrypt(base64.b64decode(text.encode('utf-8')))result= bytes.decode(plain_text).rstrip('\0')# print(result)length = len(result)# print(result[length-1])unpadding = ord(result[length - 1])# print(unpadding)finalText = result[0:length - unpadding]# print(finalText)return finalText"""
data为base64字符串
"""
def rsa_Encrypt(data):# public_key, private_key = rsa.newkeys(2048)with open(r'C:\Users\ives\Desktop\applicense\RSA\pkcs1_rsa_public_key_2048.pub', 'r') as f:public_key = rsa.PublicKey.load_pkcs1_openssl_pem(f.read().encode())encrypted_data = rsa.encrypt(data, public_key)# print(encrypted_data)return encrypted_data"""
data为base64字符串
"""
def rsa_Decrypt(data):with open(r'C:\Users\ives\Desktop\applicense\RSA\pkcs1.pem', 'r') as f:private_key = rsa.PrivateKey._load_pkcs1_pem(f.read().encode())secretTextByte = base64.b64decode(data)decrypted_data = rsa.decrypt(secretTextByte, private_key)print(decrypted_data)

c#


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/800570.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解Java对象结构

一、Java对象结构 实例化一个Java对象之后,该对象在内存中的结构是怎么样的?Java对象(Object实例)结构包括三部分:对象头、对象体和对齐字节,具体下图所示1、Java对象的三部分 (1)对象头 对象头包括三个字段,第一个字段叫作Mark Word(标记字),用于存储自身运行时的…

Kyutai 开源对话模型 Moshi;李飞飞空间智能公司已筹集超过 2.3 亿美元丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点…

P3224 [HNOI2012] 永无乡

题意思路 用并查集维护连通性,每个集合维护一个平衡树,每次合并两个集合的时候,将一个平衡树的节点一个一个加入到另一个中。 这么做不会超时,每次将小的平衡树拆掉放到大的中,可以证明不会超过 \(O(\log n)\) 次。 总时间复杂度 \(O(n \log ^ 2 n)\)。 代码 #include <…

C#使用HttpWebRequest读取网站内容遭遇503错误

本人多年编程小白,天生编程白痴体质。大家莫见笑。 自己用C#写了一段代码,使用HttpWebRequest,通过SOHU的API接口获取指定股票的交易信息。 该段代码一直运行正常。最近开始报错。 详细信息如下: System.Net.WebException HResult=0x80131509 Message=远程服务器返回错误: (…

算法随笔——wqs二分

学习链接 学习链接 应用条件选择恰好 \(x\) 个物品,求最优值 设 \(x\) 对应最优值 \(f_x\) ,\((x,f_x)\) 在图像上呈现为凸包。 无数量限制问题简单可做问题转化 有 \(n\) 个物品,恰好选 \(m\) 个,计算最优值。 做法例题 模版题:P2619

modbus设备数据 转 profinet IO项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 设置网关采集MODBUS从站数据 2 5 用PROFINET IO协议转发数据 8 6 案例总结 10 1 案例说明设置网关采集Modbus设备数据 把采集的数据转成profinet IO协议转发给其他系统。2 VFBOX网关工作原理 VFBOX网关是协议转换网关,…

WPF开发 direct3d11 调试报错

环境:VS2022 WPF Win11 过程:准备调试d3d11着色器转换nv12->rgb的过程 报错信息:DXGI_ERROR_SDK_COMPONENT_MISSING 应用程序请求的操作依赖于已缺失或不匹配的 SDK 组件。 解决方案::需要在自己电脑中进行设置 【设置】-【系统】-【可选功能】-【查看功能】-【图形工具…

Cloudera安装指南:打造你的大数据基础环境

Cloudera manage系统环境准备、基础环境安装、集群部署以及应用组件安装等全方位的技术运维内容。无论您是初学者还是资深工程师,都能在这里找到适合自己的学习资料和实战经验。我们致力于为您提供最新、最全面的Cloudera大数据技术运维知识,帮助您轻松应对各种技术挑战。Clo…

uni-app上架ios语言设置

客户反馈了一个问题,日文的应用上架后在商店中,却显示了其他语言,解决方案如下 1.添加要设置的语言2.最重要的一步,在 app-plus 中添加下述代码 name 是app名称"app-plus" : {"locales" : {"ja" : {"name" : "xxx","…

【算法】topk之字节题

1. 合并两个有序列表 🔗 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1:输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 = [], l2 = [] 输出:[] 示例 3: 输入:l1 = [], l2 = [0] …

flink 启动Job加载外部jar都有哪些方法?

flink 启动Job加载外部jar都有哪些方法 在 Apache Flink 版本中,启动 Job 时加载外部 Jar 包有几种不同的方法。这些方法允许用户引入自定义的 UDF(用户定义函数)或其他依赖项。以下是几种常见的方法: 1.使用 flink run 命令直接启动 你可以通过命令行工具 flink run 来指定…

切片器110-112

透视表切片器抓照片场景描述 针对产品汇总分析数据透视表,制做数据看板,样例如下所示:具体操作制作产品汇总分析数据透视表插入选项卡——勾选雇员——确定——插入选项卡——插入二维柱状图——将数据透视表右侧雇员拖拽到筛选字段——在空白单元格输入INDIRECT函数和MATCH…