Я использую чужой код для создания подписи RSA, используемой для проверки в файлах сохранения Xbox 360. Код считывает необходимые значения из файлов и корректно генерирует подпись.
Код:
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 из Crypto.PublicKey принимает только шесть параметров, но не показатели степени один и два (DP и DQ). Кроме того, входные данные должны быть длинными. В коде C# значения имели длину 128 и 64 байта, а не 4 байта.
Я знаю, что это может показаться до боли очевидным, но я понятия не имею, что мне нужно делать.
Я работаю с Python 2.7.3
edit: также «сообщение», которое нужно зашифровать, представляет собой хэш sha1 размером 0x118 байт файла, который содержит метаданные и хэш других частей файла.
edit: Большое спасибо, мата, я чувствую, что ближе к тому, чтобы заставить его работать. Он по-прежнему не соответствует подписи С#. В C# формат подписи устанавливается как SHA1. Что это делает и можно ли это сделать в Python?