首页 > 解决方案 > 在 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")

我不知道我的问题是什么。有人可以帮助我吗?

标签: c#pythondjangorsapkcs#11

解决方案


推荐阅读