首页 > 编程语言 >RSA加密 AES加密 py c#

RSA加密 AES加密 py c#

时间:2024-09-20 15:45:36浏览次数:1  
标签:AES 加密 c# text length result key import data

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

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

py

import os
import uuid
import base64
import wmi
import json
from datetime import datetime
import random

import rsa
import binascii
from rsa import transform, core
from binascii import b2a_hex, a2b_hex


def getAESRomdomKey():
    """
    获取密钥 n 密钥长度
    :return:
    """
    n = 16
    c_length = int(n)
    source = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
    length = len(source) - 1
    result = ''
    for i in range(c_length):
        result += source[random.randint(0, length)]
    return result


def add_to_16(text):
    """
    明文使用PKCS7填充
    最终调用AES加密方法时,传入的是一个byte数组,要求是16的整数倍,因此需要对明文进行处理
    :param text: 待加密内容(明文)
    :return:
    """
    bs = AES.block_size  # 16
    length = len(text)
    bytes_length = len(bytes(text, encoding='utf-8'))
    # tips:utf-8编码时,英文占1个byte,而中文占3个byte
    padding_size = length if(bytes_length == length) else bytes_length
    padding = 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_ECB

    text = 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 result


def aes_ECB_Decrypt(text, key):  # ECB模式的解密函数,data为密文,key为16字节密钥
    key = key.encode('utf-8')
    # key = base64.b64decode(key.encode('utf-8'))
    mode = AES.MODE_ECB
    cryptor = 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#


标签:AES,加密,c#,text,length,result,key,import,data
From: https://www.cnblogs.com/ives/p/17781121.html

相关文章

  • 如何在 Chrome 浏览器上使用「朗读文本」功能(本文主要适用于读英语)
    1启用功能在地址栏中输入Chrome://flags输入「ReadAloud」在下拉菜单中选择开启重启Chrome浏览器2 让Chrome朗读你需要的文本:在英文网页上选中你需要的文本(如是中文网页则提示:此页面不支持朗读模式,或者只读取页面上的英文单词,应该是要下载语言包)然后,我的是:点工......
  • C#使用HttpWebRequest读取网站内容遭遇503错误
    本人多年编程小白,天生编程白痴体质。大家莫见笑。自己用C#写了一段代码,使用HttpWebRequest,通过SOHU的API接口获取指定股票的交易信息。该段代码一直运行正常。最近开始报错。详细信息如下:System.Net.WebExceptionHResult=0x80131509Message=远程服务器返回错误:(503)服务......
  • ThreadPoolExecutor 与 ForkJoinPool比较
    都是Java并发包java.util.concurrent中用于执行任务的线程池,但它们的设计目的和适用场景有所不同。下面是两者之间的主要区别:设计目标ThreadPoolExecutor:主要用于处理大量异步任务。适用于各种类型的任务,特别是那些独立运行且不需要相互协作的任务。提供了高度的......
  • css3几个常用动效
    1.放大的圈 @keyframeszoom3{0%{opacity:0;transform:scale(0);}70%{opacity:1;}100%{opacity:0.7;transform:scale(1);}}.play{position:absolute;left:14.62rem;top:4.12rem;margin:1remauto;......
  • centos(linux): logrotate常用功能
    一,测试配置是否正确?-d:打印debug信息-v:显示详细的输出信息[[email protected]]#logrotate-d/etc/logrotate.d/secure-v二,配置/var/log/secure按天分割/etc/logrotate.d/secure/var/log/secure{missingokdailyrotate90notifemptydatee......
  • Cloudera安装指南:打造你的大数据基础环境
    ClouderaManager是CDH市场领先的管理平台。它以其强大的数据管理和分析能力,帮助企业能够轻松驾驭海量数据,实现数据的实时分析与洞察。作为业界第一的端到端 ApacheHadoop 的管理应用,ClouderaManager对CDH的每个部件都提供了细粒度的可视化和控制,从而设立了企业部署......
  • en造数据结构与算法C# 用Unity实现简单的群组行为算法 之 对齐
    en造数据结构与算法C#用Unity实现简单的群组行为算法之聚集-CSDN博客en造数据结构与算法C#用Unity实现简单的群组行为算法之聚集-CSDN博客演示思路1.检测自然是沿用前两节的检测范围2.对齐朝向对齐朝向就是邻居鸟的forward加起来再除总数得到平均数3.对齐速度......
  • YOLOv8改进 | 检测头篇 | 利用DynamicHead增加辅助检测头针对性检测(四头版本)
    鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)YOLOv8改进|检测头篇|利用DynamicHead增加辅助检测头针对性检测(四头版......
  • en造数据结构与算法C# 群组行为优化 和 头鸟控制
    实现:1.给鸟类随机播放随机动画使得每一只鸟扇翅膀的频率都不尽相同2.可以自行添加权重,并在最后 sumForce=separationForce+cohesionForce+alignmentForce;分别乘上相应权重,这样鸟就能快速飞行和转向辣usingSystem.Collections.Generic;usingUnityEngine;usingS......
  • tp3.2.3 config配置多数据库
    //数据库配置1‘DB_CONFIG1’=array(‘db_type’=>‘mysql’,‘db_user’=>‘root’,‘db_pwd’=>‘1234’,‘db_host’=>‘localhost’,‘db_port’=>‘3306’,‘厅闹db_name’=>‘thinkphp’),//数据库配置2‘DB_CONFIG2’=>‘这样,设返悄置2个数据库......