Hi Team,
How to store the public and private key in xml file and extract the same key to create signature/ verify signature.
CODE:
public string SignXMLD(string rawxml) ///Signature Creation Method
{
//Declaring variables
string SourceData;
byte[] tmpSource;
byte[] tmpHash;
SourceData = "AgencyBanking";
////Declaring variables
//create a byte array from source data
tmpSource = ASCIIEncoding.ASCII.GetBytes(SourceData);
Console.WriteLine("Key Pairs are generating .............please wait for few moments.......");
//RSAKeyPairGenerator generates the RSA key pair based on the random number and strength of the key required
RsaKeyPairGenerator rsaKeyPairGen = new RsaKeyPairGenerator();
rsaKeyPairGen.Init(new KeyGenerationParameters(new SecureRandom(), 2048));
keyPair = rsaKeyPairGen.GenerateKeyPair();
//Extracting the Private key from pair
RsaKeyParameters PrivateKey = (RsaKeyParameters)keyPair.Private;
//Store the private key in xml file
//How to store the private key generated from keypair into xml file and extract
//the same key and use it to generate the signature
string str = PrivateKey.FromXmlString(true);
//Generate the Digital Signature
ISigner sign = SignerUtilities.GetSigner(PkcsObjectIdentifiers.Sha1WithRsaEncryption.Id);
sign.Init(true, PrivateKey);
sign.BlockUpdate(tmpSource, 0, tmpSource.Length);
byte[] signature = sign.GenerateSignature();
string xyz = Convert.ToBase64String(signature);
Console.WriteLine();
Console.WriteLine("The Digital Signature is : ");
Console.WriteLine(ByteArrayToString(signature));
XmlDocument objdocument = new XmlDocument();
objdocument.LoadXml(rawxml);
XmlDocument newXmlr = new XmlDocument();
newXmlr.LoadXml(" ");
XmlNode rootNoder = newXmlr.ImportNode(objdocument.DocumentElement, true);
newXmlr.DocumentElement.AppendChild(rootNoder);
XmlDocument newXmlnew = new XmlDocument();
XmlNode root = newXmlr.DocumentElement;
//Create a new node.
XmlElement elem = newXmlr.CreateElement("Signature");
elem.InnerText = xyz;
root.AppendChild(elem);
string strXML = root.OuterXml;
return strXML;
}
static string ByteArrayToString(byte[] arrInput)
{
int i;
StringBuilder sOutput = new StringBuilder(arrInput.Length);
for (i = 0; i < arrInput.Length; i++)
{
sOutput.Append(arrInput[i].ToString("X".ToLower()));
}
return sOutput.ToString();
}
public bool SignXMLDResponse(string rawxml) //// SIgnature Verification Method
{
//Declaring variables
string SourceData;
byte[] tmpSource;
byte[] tmpHash;
SourceData = "AgencyBanking";
//create a byte array from source data
tmpSource = ASCIIEncoding.ASCII.GetBytes(SourceData);
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Key Pairs are generating .............please wait for few moments.......");
//Extracting the Private key from pair
bool status = false;
RsaKeyParameters PublicKey = (RsaKeyParameters)keyPair.Public;
//Verification of the Digital Signature
try
{
XmlDocument newXmlnew = new XmlDocument();
newXmlnew.LoadXml(rawxml);
XmlNodeList nodeList = newXmlnew.GetElementsByTagName("Signature");
foreach (XmlNode node in nodeList)
{
string s = node.InnerXml;
byte[] signaturenew = Convert.FromBase64String(s);
ISigner sign1 = SignerUtilities.GetSigner(PkcsObjectIdentifiers.Sha1WithRsaEncryption.Id);
sign1.Init(false, PublicKey);
sign1.BlockUpdate(tmpSource, 0, tmpSource.Length);
status = sign1.VerifySignature(signaturenew);
}
}
catch (Exception e)
{
Console.WriteLine("The Digital Signature is Valid" + e.Message + e.StackTrace);
}
return status;
}
Please assist me regarding this
Thanks
Yazhini MPPosted Dec 17, 2021, 4:38 AM
To store the keys in XML format.
RSACryptoServiceProvider has two methods: ToXmlString and FromXmlString.
Depending on how you set its option, ToXmlString will produce an XML string containing either only the public key data or both the public and private key data. When an XML string containing either the public key data or both the public and private key data is passed to the FromXmlString function, it will populate the RSACryptoServiceProvider with the appropriate key data.
Sowmya SirsiPosted Dec 16, 2021, 6:06 PM
Srinivasan RamamoorthiPosted Dec 16, 2021, 1:03 PM