저는 파일, 일부 암호를 저장해야하는 C# 프로젝트에서 작업하고 있습니다. sha1로 암호화하고 싶습니다. C 프로젝트에서 sha1 prog을 암호화/해독합니다. 내 C# 프로젝트에서 암호 extern "C"__declspec (dllexport) char * Password_SHA1_Build (char * Password)를 암호화하는 C 함수 인 "password_sha1_build"를 호출하려고합니다. C# 프로젝트에서 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가 서명과 일치하지 않습니다 ... 불균형합니다. 문자열/char *를 사용하고 있다는 사실에서 문제가 발생할 수 있지만, 그럴 경우 처리 할 수 있습니까? ..
감사합니다. 모두에게
답장을 보내 주셔서 감사합니다.
나는 내 주제에서 내가 분명하지 않다는 것을 알았다. "서버"로 사용되는 C 프로그램은 infos.cfg라는 파일을 읽고 여기서 C# -program에 암호화 된 암호가 저장됩니다. C 프로그램 자체는 개발되지 않았지만 "char * Password_SHA1_Build (char * Password)"함수로 빌드 된 sha1 암호를 읽을 수있는 "int Password_SHA1_Check (char * Password, char * Hash) ".
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#에서 SHA1과 암호를 저장하려고 "암호 : SHA1 : 576295.49880ab837e9179dd68dfb142342f368e821de43를" "."을하기 전에 소금이고 이후 해시입니다
하지만 C 프로그램이 그의 Password_SHA1_Check를 실행할 때 입력 한 암호가 저장된 암호와 같지 않다고 알려줍니다. 나는 암호가 약해서 다른 작품들로 바쁘다. 그래서 나는 "Password_SHA1_Build"함수를 사용하지 않고 "C# programm"에서이 함수를 호출하려고하는 이유를 설명한다. 나는 그것이 명확하다 희망한다, 나는 유감 스럽다 나의 영어는 확실히 나쁘다.
Reed Copsey : 고마워. 나는 적어도 Pinvoke 예외를 무시했지만 이제는 "AccessViolationException"을 얻었습니다. 그래서 더 이상 아이디어가 다시 한번 감사드립니다!
당신이 그물의 SHA1 구현을 사용하지 않는 이유는 무엇입니까? –
데이터 마샬링에서 문제가 될 수 있습니다. http://msdn.microsoft.com/en-us/magazine/cc164123.aspx –
"대답"은 정말 질문에 대한 업데이트이므로 병합했습니다. 새 정보를 추가하려면 질문을 편집하십시오. – ChrisF