c# - 在 django 中实现签名数据
问题描述
我在 c# 中有一个代码。
public string GetSign(string data)
{
var cs = new CspParameters { KeyContainerName = "PaymentTest" };
var rsa = new RSACryptoServiceProvider(cs) { PersistKeyInCsp = false };
rsa.Clear();
rsa = new RSACryptoServiceProvider();
rsa.FromXmlString("<RSAKeyValue><Modu-
lus>My RSA Private Key</RSAKeyValue>");
byte[] signMain = rsa.SignData(Encoding.UTF8.GetBytes(data), new
SHA1CryptoServiceProvider());
string sign = Convert.ToBase64String(signMain);
return sign;
}
我想在 django 中实现这段代码。在此代码中,使用了 SHA1。我用 SHA256 在 python 中实现了这个,但结果不一样。
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_PKCS1_v1_5
from Crypto.Signature import PKCS1_v1_5
from base64 import b64decode, b64encode
def sign_data(data, private_key_path):
from Crypto.Hash import SHA256
message = b64encode(bytes(data, 'utf8'))
digest = SHA256.new()
digest.update(message)
private_key = False
logger.info(private_key_path)
with open(private_key_path, "r") as key_file:
private_key = RSA.importKey(key_file.read())
signer = PKCS1_v1_5.new(private_key)
sig = signer.sign(digest)
sig = b64encode(sig)
return sig
我将 SHA256 更改为 SHA1,但它给了我错误:
File "/home/kamiar/.pyenv/versions/3.6.8/lib/python3.6/site-packages/Crypto/Util/asn1.py", line 211, in encode
raise ValueError("Trying to DER encode an unknown object")
我不知道我的问题是什么。有人可以帮助我吗?
解决方案
推荐阅读
- python-3.x - Selenium python webscraper - 如何仅选择网页列表中更改的第一个文档?
- git - 我错误地发出了一个 git branch --set-upsteam-to,那是做什么的?
- javascript - 'prop-types' 应该列在项目的依赖项中,而不是 devDependencies
- python - 循环通过多个 API 链接获取数据?似乎从一个链接带回数据
- python - 如何使用函数定义的简单断言语句来接受 2 个参数中的 1 个,但不能同时接受关键字参数?
- typescript - 如何使用 .map 和 .filter 将两个数组合并为一个
- html - 给它一个边框后按钮不再可点击
- python - 如何让笛卡尔积过滤出具有重复结果的元组对?
- groovy - Groovy - 插入方法后没有方法签名
- python - 在 tkinter 中调整画布大小和重绘画布