public static string REG(string name)
{
string str3;
try
{
string xmlString = "<RSAKeyValue><Modulus>lL3bbCNd5/ZRSQb+p1pgY4KVna8/gxHY1WuFjN/uVOPCQOncC+6zilzNyChY3dIv+mG1rHXJ3W+e/jp6iJTtjOdlViLhulNcAjIsjyk5266cZOToDEcxH+mHtRAFBx78pkWfvwckEoi7SXHTGo1n39dxZHnUX3JsWN/N/gVSamk=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
string regcode ="smX8v0uMk+KAftq4CZqJtMi6yYwWBJ9u9lrcDjo9PDhvbIQ2mPADGjdsj8AktT1QlNzavdK9iT5VDJ1Om/4UGvDW3bzSeXZRrTWlnBD3Mm62twIe/fZSfMOO0N+7v6T1dqWS+myVlf+K8opoBI3hg04BMpJg5+69H/oZsJmhPwI=";//读取配置文件的
using (RSACryptoServiceProvider provider = new RSACryptoServiceProvider())
{
provider.FromXmlString(xmlString);
RSAPKCS1SignatureDeformatter deformatter = new RSAPKCS1SignatureDeformatter(provider);
deformatter.SetHashAlgorithm("SHA1");
byte[] rgbSignature = Convert.FromBase64String(regcode);
byte[] rgbHash = new SHA1Managed().ComputeHash(Encoding.ASCII.GetBytes(name));//已知name为0001C0WNPAA0INJ0201
if (deformatter.VerifySignature(rgbHash, rgbSignature))
{
return "1";
}
str3 = "0";
}
}
catch (Exception)
{
str3 = "0";
}
return str3;
}
以上程序怎么算出regcode啊!
------解决思路----------------------
验证用RSAPKCS1SignatureDeformatter,只需要公钥,即xmlString中的<Modulus>和<Exponent>部分。
创建则用RSAPKCS1SignatureFormatter,需要密钥。
class Program
{
static string xmlString =
"<RSAKeyValue><Modulus>lJbx69u3TC7gqTYzhOg4Ly77hKARiVjmF6Mjl5+JhmzlSxOMyxE3wBOQfsbNSD4RkxyP0nWeBrxLqkBZ7fTrIWae" +
"YPut8aa1JyUWS+IxiiMoAaCY9SCz7W9/+5PGkRaw9P4P0UFSQY+b/tkQnxMwu/QjhLmcKOzs/qF45MZFkRc=</Modulus><Exponent>AQAB</Exponent>" +
"<P>wxdqxYQNBAXMeve6O6eYAMx1RvbG1ksfZIga067oqLuGzw0nAf1hAnsnFPe3etorvepOawhg48aJvoWxbfT4vQ==</P><Q>wvrkgfp0pd8n" +
"qjfR7l15AjJQYo0CPElG9sOC/FvCYKKXal5Dr3DXrAIMF9EnEO59HQXwm7pt1Ze4UZu/KrTgYw==</Q><DP>sTc4WitV122dDaaymTXoMfGIJu" +
"pMPKUI4z1vgRLFbWDLWJHN+VS9Jo/QNI/BL+u3CFEq4rc9rCrRPSwcvJFm0Q==</DP><DQ>thFsAYdrF1yrAELBkHDOR2PONkhv9vWCA3kLvjS" +
"87FnHRDcjwxZ+/gqnWjIe5audPtXGGNTcLSBQqDvkJa/i+w==</DQ><InverseQ>j2kRFgaI+spUi8gJuFqAOcsWt6Y1AiB8eWE+dZpzxUNEsH" +
"NgFvij4GgGM2ZRHbiHgFfclBXvUQkePp3h9yG4Aw==</InverseQ><D>MfBROl3LyvTuWLB4vDB3wZPewIIzop+YJVWU/r6FsAIlRgg6B32v6Q" +
"QqShFyqNcDfRfaVndlNwpNu9iI4OqxozMKoGCYmOC08I8E9GZnvAXNFfRCz12nxvRJbUH9gqHzt267eiTeFQXkHbu3GcPofJK5orErT5+IV2PZqpgxf7E=</D></RSAKeyValue>";
static void Main(string[] args)
{
// 为用户hello创建一个注册码
string regcode = CreateRegcode("hello");
// 核实用户hello提交的注册码
bool ok1 = VerifyRegcode("hello", regcode); // true
bool ok2 = VerifyRegcode("HELLO", regcode); // false
}
static string CreateRegcode(string name)
{
using (RSACryptoServiceProvider provider = new RSACryptoServiceProvider())
{
provider.FromXmlString(xmlString);
byte[] rgbHash = new SHA1Managed().ComputeHash(Encoding.ASCII.GetBytes(name));
RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(provider);
RSAFormatter.SetHashAlgorithm("SHA1");
byte[] rgbSignature = RSAFormatter.CreateSignature(rgbHash);
return Convert.ToBase64String(rgbSignature);
}
}
static bool VerifyRegcode(string name, string regcode)
{
using (RSACryptoServiceProvider provider = new RSACryptoServiceProvider())
{
provider.FromXmlString(xmlString);
RSAPKCS1SignatureDeformatter deformatter = new RSAPKCS1SignatureDeformatter(provider);
deformatter.SetHashAlgorithm("SHA1");
byte[] rgbSignature = Convert.FromBase64String(regcode);
byte[] rgbHash = new SHA1Managed().ComputeHash(Encoding.ASCII.GetBytes(name));
return deformatter.VerifySignature(rgbHash, rgbSignature);
}
}
}