ファイルにいくつかのパスワードを保存する必要がある C# プロジェクトに取り組んでいます。それらをsha1で暗号化したい。私はすでに C プロジェクトで sha1 prog の暗号化/復号化を行っています。私のC#プロジェクトからパスワードextern "C" __declspec(dllexport) char * Password_SHA1_Build(char *Password))を暗号化するC関数である「password_sha1_build」を呼び出したいです。
「Password_SHA1_Build」関数があるファイルからdllを構築し、次のようにC#プロジェクトから呼び出すようにしました:
[DllImport("Pass.dll")]
public static extern string Password_SHA1_Build(string Password);
...
string password = "iamlee";
string hashedpwd = "";
hashedpwd = Password_SHA1_Build(password);
そして、Pinvoke が署名と一致しないというエラー (フランス語) が表示されます... アンバランスです。string / char * を使用していることが原因ではないかと思いましたが、その場合は対処できますか?.
必要に応じてさらに情報を求めてください。ありがとうございました
こんにちは、すべての回答に感謝します。
私は自分の主題が十分にはっきりしていないことに気づきました。C# プログラムに書き込まれた暗号化されたパスワードが格納されている infos.cfg という名前のファイルを読み取る「サーバー」として使用される C プログラムがあります。この C プログラムは自分で開発したものではありませんが、関数 "char * Password_SHA1_Build(char *Password)" によって作成された sha1 パスワードを読み取ることができる "int Password_SHA1_Check(char *Password, char *Hash)" という名前の関数が含まれています。 .
最初は、次のように c# で sha1 を使用してパスワードを保存しようとしました。
System.Security.Cryptography.SHA1 hash = System.Security.Cryptography.SHA1.Create();
System.Text.ASCIIEncoding encoder = newS ystem.Text.ASCIIEncoding();
byte[] combined = encoder.GetBytes(password);
hash.ComputeHash(combined);
//rethash = Convert.ToBase64String(hash.Hash);
System.Security.Cryptography.SHA1CryptoServiceProvider sha1 = new System.Security.Cryptography.SHA1CryptoServiceProvider();
byte[] hash = sha1.ComputeHash(System.Text.Encoding.ASCII.GetBytes(password));
string delimitedHexHash = BitConverter.ToString(hash);
string hexHash = delimitedHexHash.Replace("-", "");
rethash = hexHash;
パスワードは次のようにファイルに保存されます。はソルトで、後はハッシュです
しかし、C プログラムが Password_SHA1_Check を実行すると、入力したパスワードが保存されているパスワードと同じではないことがわかります。私は暗号が苦手で、他の作業で忙しいので、「既に存在して機能する「Password_SHA1_Build」関数を使用しないのはなぜですか」と自問したので、C#プログラムからこの関数を呼び出そうとしました。これが明確であることを願っています。申し訳ありませんが、私の英語はかなり下手です。
Reed Copsey へ : ありがとうございます