zoukankan      html  css  js  c++  java
  • RSA--通过模和指数加密模板--无填充

    一.模板一

    import rsa
    #模
    m = "ae068c2039bd2d82a529883f273cf20a48e0b6faa564e740402375a9cb332a029b8492ae342893d9c9d53d94d3ab8ae95de9607c2e03dd46cebe211532810b73cc764995ee61ef435437bcddb3f4a52fca66246dbdf2566dd85fbc4930c548e7033c2bcc825b038e8dd4b3553690e0c438bbd5ade6f5a476b1cbc1612f5d501f"
    #指数
    e = '10001'
    #加密参数
    message = '123456'
    
    class Encrypt(object):
        def __init__(self, e, m):
            self.e = e
            self.m = m
    
        def encrypt(self, message):
            mm = int(self.m, 16)
            ee = int(self.e, 16)
            rsa_pubkey = rsa.PublicKey(mm, ee)
            crypto = self._encrypt(message.encode(), rsa_pubkey)
            return crypto.hex()
    
        def _pad_for_encryption(self, message, target_length):
            message = message[::-1]
            max_msglength = target_length - 11
            msglength = len(message)
    
            padding = b''
            padding_length = target_length - msglength - 3
    
            for i in range(padding_length):
                padding += b'x00'
    
            return b''.join([b'x00x00', padding, b'x00', message])
    
        def _encrypt(self, message, pub_key):
            keylength = rsa.common.byte_size(pub_key.n)
            padded = self._pad_for_encryption(message, keylength)
    
            payload = rsa.transform.bytes2int(padded)
            encrypted = rsa.core.encrypt_int(payload, pub_key.e, pub_key.n)
            block = rsa.transform.int2bytes(encrypted, keylength)
    
            return block
    
    if __name__ == '__main__':
        en = Encrypt(e, m)
        print(en.encrypt(message))
    

    二.模板二

    import codecs
    
    def rsa_encrypt(content):
        public_exponent = '010001'
        public_modulus = 'ae068c2039bd2d82a529883f273cf20a48e0b6faa564e740402375a9cb332a029b8492ae342893d9c9d53d94d3ab8ae95de9607c2e03dd46cebe211532810b73cc764995ee61ef435437bcddb3f4a52fca66246dbdf2566dd85fbc4930c548e7033c2bcc825b038e8dd4b3553690e0c438bbd5ade6f5a476b1cbc1612f5d501f'
    
        content = content[::-1]
        rsa = int(codecs.encode(content.encode('utf-8'), 'hex_codec'),
                  16) ** int(public_exponent, 16) % int(public_modulus, 16)
        # 把10进制数rsa转为16进制('x'表示16进制),再取前256位,不够的在最前面补0
        return format(rsa, 'x').zfill(256)
    

    三.模板三

    import math
    if __name__ == '__main__':
        # 实为16进制串,前补0
        e = ''
        # m也需要补00
        m = '008eb933413be3234dddd2730fbb1d05c8848a43d5dc3bdd997f2a9935fba6beb9ffb36854482b0b46cf7e6f9afbbe2e2e7d606fde20bec57dbf722e7985192e8813e6b67628a6f202cf655b7d2ffce4e9dc682dd6034ae706c8e255f25e4051b9ca43f25b3ad686aac9c8f6aeb71d921c13a255c806f78a5a7b9a356c2dd274e3'
        m = int.from_bytes(bytearray.fromhex(m), byteorder='big')
        e = int.from_bytes(bytearray.fromhex(e), byteorder='big')
        # js加密为反向,为保持一致原文应反向处理,所以这里原文实际为204dowls
        plaintext = 'slwod402'.encode('utf-8')
        # 无填充加密逻辑
        input_nr = int.from_bytes(plaintext, byteorder='big')
        crypted_nr = pow(input_nr, e, m)
        keylength = math.ceil(m.bit_length() / 8)
        crypted_data = crypted_nr.to_bytes(keylength, byteorder='big')
        print(crypted_data.hex())
    
  • 相关阅读:
    Docker windows 安装MySql和Tomcat
    Python2 Python3 爬取赶集网租房信息,带源码分析
    BeautifulSoup 一行代码获取今日日期,与smtplib结合
    Python3.x 发送邮件
    Python3 pymysql连接mysql数据库 windows
    urllib2.HTTPError: HTTP Error 403: Forbidden的解决方案
    BeautifulSoup([your markup]) to this: BeautifulSoup([your markup], "lxml") 解决未设置默认解析器的错误
    Python 3.x 中"HTTP Error 403: Forbidden"问题的解决方案
    继承习题
    继承
  • 原文地址:https://www.cnblogs.com/pythonywy/p/13534096.html
Copyright © 2011-2022 走看看