我正在开发一个 C# 项目,我必须在文件中存储一些密码。我想用sha1加密那些。我已经在 C 项目中加密/解密 sha1 prog。我想从我的 C# 项目中调用“password_sha1_build”,它是加密密码 extern "C" __declspec(dllexport) char * Password_SHA1_Build(char *Password)) 的 C 函数。
我从有“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 与签名不匹配的错误(法语)......不平衡。我坚持认为问题可能来自我使用字符串/字符 * 的事实,但如果是这种情况,我可以处理吗?
如果需要,请询问更多信息 谢谢大家
嗨,感谢大家的回答。
我注意到我的主题不够清楚。有一个用作“服务器”的 C 程序,它将读取名为 infos.cfg 的文件,其中存储了在 C# 程序中写入的加密密码。C程序不是我自己开发的,但它包含一个名为“int Password_SHA1_Check(char *Password, char *Hash)”的函数,它能够读取由函数“char * Password_SHA1_Build(char *Password)”构建的sha1密码.
因此,起初我尝试使用 sha1 将密码存储在 c# 中,如下所示:
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;
密码像这样存储在文件中:“。”之前的“密码:sha1:576295.49880ab837e9179dd68dfb142342f368e821de43”。是盐,之后是哈希
但是当 C 程序执行他的 Password_SHA1_Check 时,他告诉我我输入的密码与存储的密码不同。我在加密方面有点弱,并且忙于其他工作,所以我只是问自己“为什么不使用已经存在并且有效的“Password_SHA1_Build”函数”所以这就是为什么我试图从我的 C# 程序中调用这个函数。我希望这很清楚,对不起,我的英语很糟糕。
致 Reed Copsey:谢谢我试过了,至少 Pinvoke 异常消失了,但现在我得到了一个“AccessViolationException”。所以任何更多的想法都会受到欢迎,再次感谢!