zoukankan      html  css  js  c++  java
  • python使用rsa库做公钥解密(网上别处找不到)

      版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址
    
      http://www.cnblogs.com/Colin-Cai/p/8013009.html 
    
      作者:窗户
    
      QQ:6679072
    
      E-mail:6679072@qq.com
    

      使用RSA公钥解密,用openssl命令就是openssl rsautl -verify -in cipher_text -inkey public.pem -pubin -out clear_text,但其python网上还真没有找到有博文去写,只有hash的rsa解签名。

      这里使用rsa库,如果没有可以到官方网址https://pypi.python.org/pypi/rsa/3.1.4下载。

      想了想原理,然后到rsa库的python代码里找了找,从verify的代码里提取了出来,又试验了试验,一切OK了。

      代码如下:

    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    import sys
    #rsa
    from rsa import PublicKey, common, transform, core
    def f(cipher, PUBLIC_KEY):
            public_key = PublicKey.load_pkcs1(PUBLIC_KEY)
            encrypted = transform.bytes2int(cipher)
            decrypted = core.decrypt_int(encrypted, public_key.e, public_key.n)
            text = transform.int2bytes(decrypted)
    
            if len(text) > 0 and text[0] == 'x01':
                pos = text.find('x00')
                if pos > 0:
                    return text[pos+1:]
                else:
                    return None
    
    fn = sys.stdin.readline()[:-1]
    public_key = sys.stdin.readline()[:-1]
    x = f(open(fn).read(), open(public_key).read())
    print x
    

      用shell验证如下:

     $ openssl genrsa -out pri2048.pem 2048
    Generating RSA private key, 2048 bit long modulus
    ..+++
    ..............................................+++
    e is 65537 (0x10001)
     $ openssl rsa -in pri2048.pem -out pub2048.pem -RSAPublicKey_out
    writing RSA key
     $ echo -n 'Just a test' >1.txt
     $ openssl rsautl -sign -in 1.txt -inkey pri2048.pem -out 1.bin
     $ { echo 1.bin; echo pub2048.pem; } | ./test_rsa.py
    Just a test
    

      一切OK,注意,公钥pem从私钥里析出必须用-RSAPublicKey_out,这样pem文件的第一行和最后一行为以下,这样rsa.PublicKey.load_pkcs1才会认识。

      -----BEGIN RSA PUBLIC KEY-----

      -----END RSA PUBLIC KEY-----

  • 相关阅读:
    CodeForces
    4.15随笔
    oracle新建用户并赋予权限等
    catch时,获取异常信息
    ORACLE 判断是否为数字类型
    UNION ALL用法
    2019.11.7随笔
    oracle 查询锁表和解锁
    2019.11.1随笔
    oracle拼接子查询返回的多个结果
  • 原文地址:https://www.cnblogs.com/Colin-Cai/p/8013009.html
Copyright © 2011-2022 走看看