chenqh 最近的时间轴更新
chenqh

chenqh

V2EX 第 132006 号会员,加入于 2015-08-10 11:27:29 +08:00
今日活跃度排名 2505
根据 chenqh 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
chenqh 最近回复了
@find456789 python 跑了三四个示例项目, 还有一个 mattermost, 没内存了,升到了 4G
2 小时 14 分钟前
回复了 szq8014 创建的主题 程序员 你们的项目启动时间是几秒?
@byte10 golang 是启动快,但是写的时候想死
800M 内存就够了?为什么我自己的 2G 不够用呀, 你用的 C?
3 小时 32 分钟前
回复了 szq8014 创建的主题 程序员 你们的项目启动时间是几秒?
@zzzmh 10 来此重启,我 2 分钟就用完了
5 小时 57 分钟前
回复了 wfdaj 创建的主题 PHP 请问,这种情况下返回类型声明有必要吗?
@Trim21 可能只是为了函数别名
能上 100QPS 都好事了,
大神, 我学历比你好,没你高
6 天前
回复了 chenqh 创建的主题 Python 今天碰到一个对接 Java rsa pkcs1 用公钥解密,
@among


```
import M2Crypto
from tornado import escape
import base64
"""
sudo yum install -y python3-devel openssl-devel swig
pip install M2Crypto
"""

def handle_key_inner(key, start, end):
result = ''
# 分割 key,每 64 位长度换一行
divide = int(len(key) / 64)
divide = divide if (divide > 0) else divide + 1
line = divide if (len(key) % 64 == 0) else divide + 1
for i in range(line):
result += key[i * 64:(i + 1) * 64] + '\n'
result = start + result + end
return result


def handle_pub_key(key):
"""
处理公钥
公钥格式 pem,处理成以-----BEGIN PUBLIC KEY-----开头,-----END PUBLIC KEY-----结尾的格式
:param key:pem 格式的公钥,无-----BEGIN PUBLIC KEY-----开头,-----END PUBLIC KEY-----结尾
:return:
"""
start = '-----BEGIN PUBLIC KEY-----\n'
end = '-----END PUBLIC KEY-----'
return handle_key_inner(key, start, end)


def handle_pri_key(key):
start = '-----BEGIN PRIVATE KEY-----\n'
end = '-----END PRIVATE KEY-----'
return handle_key_inner(key, start, end)


def util_rsa_encrypt_with_private_key_str(msg: bytes, private_key_str: str, blocksize=117):
private_key_str = "".join([e.strip() for e in private_key_str.splitlines()])
private_key_str = handle_pri_key(private_key_str)
bio = M2Crypto.BIO.MemoryBuffer(private_key_str.encode("utf-8"))
rsa_pri = M2Crypto.RSA.load_key_bio(bio)
out_li = []
len_msg = len(msg)
for i in range(0, len_msg, blocksize):
piece = msg[i:i + blocksize]
ctxt_pri = rsa_pri.private_encrypt(piece, M2Crypto.RSA.pkcs1_padding) # 这里的方法选择加密填充方式,所以在解密的时候 要对应。
out_li.append(ctxt_pri)
raw_msg = b''.join(out_li)
return base64.b64encode(raw_msg)


def pub_decrypt_with_pubkeyfile(msg, file_name):
rsa_pub = M2Crypto.RSA.load_pub_key(file_name)
pub_decrypt(msg, rsa_pub)


def util_rsa_decrypt_with_public_key_str(msg, pub_key: str):
"""
Args:
msg: base64 string
"""
pub_key = "".join([e.strip() for e in pub_key.splitlines()])
pub_key = handle_pub_key(pub_key)
msg = escape.utf8(msg)
bio = M2Crypto.BIO.MemoryBuffer(pub_key.encode("utf-8"))
rsa_pub = M2Crypto.RSA.load_pub_key_bio(bio)
return pub_decrypt(msg, rsa_pub)


def pub_decrypt(msg, rsa_pub, block_size=128):

ctxt_pri = base64.b64decode(msg) # 先将 str 转成 base64
# maxlength = 128
li = []
len_ctxt = len(ctxt_pri)
for i in range(0, len_ctxt, block_size):
input = ctxt_pri[i:i + block_size]
out = rsa_pub.public_decrypt(input, M2Crypto.RSA.pkcs1_padding) # 解密
li.append(out)
return b''.join(li)

```
关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2750 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 7ms · UTC 10:34 · PVG 18:34 · LAX 03:34 · JFK 06:34
♥ Do have faith in what you're doing.