0
私はサーバーとクライアントを持っています。 セキュリティに関する課題があります。 サーバーとクライアントの間の会話: クライアント:設定ファイル、サーバーを与えてください! サーバー:デジタル署名付きの設定ファイルを送信する クライアント:データを受信するC言語のデジタル署名
どのような方法を選択すればよいですか?
- プライベートキーと公開キー(サーバー側)を生成します。 XMLファイル内
- 保存秘密鍵(TIP1)
- クライアントは、(秘密鍵と一緒に生成された)公開鍵
クライアントがサーバにリクエストを送信する際に、よりで拡散されます。 1.サーバはXMLファイル(TIP1)から秘密鍵を取得し、設定ファイル+デジタル署名(秘密鍵で暗号化)を送信する。 2.クライアントはサーバから応答を受信し、公開鍵でデジタル署名を確認する。
C#のアイデア? キー(プライベートとパブリック)私は特別なプログラムによって生成されます。秘密鍵はxml-fileに保存されます。
さらに
私は多分、私がしたい仕事をいくつかのクラスを書いた:
public class Cryptography
{
private const string CONTAINER_NAME = "MyContainer";
private static RSACryptoServiceProvider rsa;
private static MD5 md5;
private static void AssignParameter()
{
CspParameters cspParams;
cspParams = new CspParameters();
cspParams.KeyContainerName = CONTAINER_NAME;
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
rsa = new RSACryptoServiceProvider(cspParams);
}
static Cryptography()
{
md5 = MD5.Create();
}
public static byte[] CreateSignature(byte[] data, string pathToKey)
{
AssignParameter();
StreamReader reader = new StreamReader(pathToKey);
string privateKeyXML = reader.ReadToEnd();
rsa.FromXmlString(privateKeyXML);
reader.Close();
RSAPKCS1SignatureFormatter RSAform = new RSAPKCS1SignatureFormatter(rsa);
RSAform.SetHashAlgorithm("MD5");
byte[] hashData = md5.ComputeHash(data);
return RSAform.CreateSignature(hashData);
}
public static bool VerifySignature(byte[] originalData, byte[] data, string pathToKey)
{
StreamReader reader = new StreamReader(pathToKey);
string publicKeyXML = reader.ReadToEnd();
rsa.FromXmlString(publicKeyXML);
reader.Close();
RSAPKCS1SignatureDeformatter RSAdeform = new RSAPKCS1SignatureDeformatter(rsa);
RSAdeform.SetHashAlgorithm("MD5");
byte[] hashOriginalData = md5.ComputeHash(originalData);
return RSAdeform.VerifySignature(hashOriginalData, data);
}
public static void AssignNewKey()
{
AssignParameter();
StreamWriter writer = new StreamWriter(@"D:\cryptography\privatekey.xml");
string privatePrivateKeyXML = rsa.ToXmlString(true);
writer.Write(privatePrivateKeyXML);
writer.Close();
writer = new StreamWriter(@"D:\cryptography\publickey.xml");
string publicOnlyKeyXML = rsa.ToXmlString(false);
writer.Write(publicOnlyKeyXML);
writer.Close();
}
}
あなたはどう思いますか?
私はキーを使用してそれを処理する必要がある理由があります。 – Developex
あなたの質問にその理由を説明する必要があります。 –
ソフトの要件では.NET 2.0しか使用できません – Developex