我使用的是别人的代码来生成在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,和我看的文件,但我仍然失去了一些东西明显。 首先,从Crypto.PublicKey的RSA.construct只需要六个参数,而不是指数一和二(DP和DQ)。 此外,输入需要是多头。 在C#代码,该值分别为128首64个字节长,而不是4字节长。
我知道这可能看起来非常明显的,但我不知道我需要做的。
我使用Python 2.7.3工作
编辑:另外,“消息”将被加密是量0x118个字节文件,其中包含的元数据和文件的其它部分的散列的SHA1哈希。
编辑:谢谢你这么多马塔,我觉得我更接近得到它的工作。 它仍然不匹配,C#签名。 在C#中,签名格式被设置为SHA1。 这是什么做的,并且可以将其在Python做呢?