尝试使用Python从C#cod生成RSA签名

2024-06-07 05:07:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用其他人的代码生成一个用于验证xbox 360保存文件的RSA签名。代码从文件中读取所需的值并正确生成签名。在

代码是:

    byte[] xHash=null;
    RSAParameters xParams = new RSAParameters();
    br.BaseStream.Position = 0x1A8;
    xParams.D = br.ReadBytes(0x80);
    xParams.Exponent = br.ReadBytes(0x4);
    xParams.Modulus = br.ReadBytes(0x80);
    xParams.P = br.ReadBytes(0x40);
    xParams.Q = br.ReadBytes(0x40);
    xParams.DP = br.ReadBytes(0x40);
    xParams.DQ = br.ReadBytes(0x40);
    xParams.InverseQ = br.ReadBytes(0x40);
    br.close();

    br=new BinaryReader(File.OpenRead(f));
    br.BaseStream.Position=0x22c;
    xHash = new SHA1CryptoServiceProvider().ComputeHash(br.ReadBytes(0x118));
    byte[] xrsa=SignatureGenerate(xParams, xHash);

public static byte[] SignatureGenerate(RSAParameters xParam, byte[] xHash)
        {
            RSACryptoServiceProvider xRSACrypto = new RSACryptoServiceProvider();
            RSAPKCS1SignatureFormatter xRSASigFormat = new RSAPKCS1SignatureFormatter();
            xRSACrypto.ImportParameters(xParam);
            xRSASigFormat.SetHashAlgorithm("SHA1");
            xRSASigFormat.SetKey(xRSACrypto);
            return xRSASigFormat.CreateSignature(xHash);

        }

我试图以xrsa中的内容结束,但是使用Python。我安装了pycrypto,我正在查看文档,但是我仍然缺少一些明显的东西。首先RSA.construct公司从加密公钥只需要六个参数,而不是指数1和2(DP和DQ)。而且,输入必须是长的。在C代码中,值的长度分别是128和64字节,而不是4字节长。在

我知道这似乎很明显,但我不知道我需要做什么。在

我正在使用python2.7.3

编辑:另外,要加密的“消息”是文件0x118字节的sha1哈希,其中包含元数据和文件其他部分的哈希。在

编辑:非常感谢你,玛塔,我觉得我离让它工作更近了。它仍然与C签名不匹配。在C#中,签名格式被设置为SHA1。这是在做什么,它能用Python实现吗?在


Tags: 文件代码brnew字节positionbytersa
2条回答

好的,首先:python中的long不是4字节。在python中,long没有预定义的大小,因此使用long存储128字节的数字是没有问题的。 要将bytestring转换为long,可以使用:

long_value = long(string_value.decode('hex'), 16)
# maybe someone knows a better way?

难道文件不是按顺序排列的吗?在这种情况下,您可以简单地使用以下命令读取文件:

^{pr2}$

如果没有,最好将其转换为PEM或DER,这样您就不必自己读取参数了。 总之,RSA.construct中的最后三个参数是可选的,特别是u可以计算为1/p % q (where p > q)。 至少从我所尝试的来看,即使只指定前三个参数,它也能工作。在

我尝试了pycrypto和另一个库,但最终得到了我想要的M2Crypto。在

在Windows上安装M2Crypto是一件非常痛苦的事情,但是这里的安装文件非常简单:

http://chandlerproject.org/bin/view/Projects/MeTooCrypto

到Windows installer的下载链接在此处:http://chandlerproject.org/pub/Projects/MeTooCrypto/M2Crypto-0.21.1.win32-py2.7.exe

相关问题 更多 >