From 913ad6318877e3602e72386c15ff4d840d22da4b Mon Sep 17 00:00:00 2001 From: taynpg Date: Mon, 30 Dec 2024 16:06:37 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E6=AD=A3=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E8=B7=AF=E5=BE=84=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 10 +++++++++- md5.cpp | 11 ++++++++++- sha256.cpp | 36 ++++++++++++++++++++++++++---------- 3 files changed, 45 insertions(+), 12 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 228bf63..d91eb4a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -96,6 +96,14 @@ "ratio": "cpp", "sstream": "cpp", "string_view": "cpp", - "vector": "cpp" + "vector": "cpp", + "array": "cpp", + "functional": "cpp", + "hash_map": "cpp", + "set": "cpp", + "unordered_map": "cpp", + "xhash": "cpp", + "xtree": "cpp", + "span": "cpp" } } \ No newline at end of file diff --git a/md5.cpp b/md5.cpp index 658fb08..6c3db67 100644 --- a/md5.cpp +++ b/md5.cpp @@ -10,6 +10,15 @@ #include #include namespace fs = std::filesystem; +std::string GetExecutablePath() +{ + char buffer[MAX_PATH]; + DWORD length = GetModuleFileName(nullptr, buffer, MAX_PATH); + if (length == 0) { + return ""; + } + return std::string(buffer); +} #endif std::string to_hex_string(const unsigned char* hash, size_t length) @@ -57,7 +66,7 @@ int main(int argc, char* argv[]) #ifdef _WIN32 #include - std::string load_dll_dir = fs::path(argv[0]).append("mdsha_dll").string(); + std::string load_dll_dir = fs::path(GetExecutablePath()).parent_path().append("mdsha_dll").string(); SetDllDirectory(load_dll_dir.c_str()); #endif diff --git a/sha256.cpp b/sha256.cpp index 4caa9cb..a647351 100644 --- a/sha256.cpp +++ b/sha256.cpp @@ -1,7 +1,7 @@ -#include #include -#include #include +#include +#include #include #include @@ -9,23 +9,37 @@ #include #include namespace fs = std::filesystem; +std::string GetExecutablePath() +{ + char buffer[MAX_PATH]; + DWORD length = GetModuleFileName(nullptr, buffer, MAX_PATH); + if (length == 0) { + return ""; + } + return std::string(buffer); +} #endif -std::string to_hex_string(const unsigned char* hash, size_t length) { +std::string to_hex_string(const unsigned char* hash, size_t length) +{ std::ostringstream oss; for (size_t i = 0; i < length; ++i) { - oss << std::hex << std::setw(2) << std::setfill('0') << static_cast(hash[i]); + oss << std::hex << std::setw(2) << std::setfill('0') + << static_cast(hash[i]); } return oss.str(); } -std::string sha256_string(const std::string& input) { +std::string sha256_string(const std::string& input) +{ unsigned char hash[SHA256_DIGEST_LENGTH]; - SHA256(reinterpret_cast(input.c_str()), input.size(), hash); + SHA256(reinterpret_cast(input.c_str()), input.size(), + hash); return to_hex_string(hash, SHA256_DIGEST_LENGTH); } -std::string sha256_file(const std::string& filename) { +std::string sha256_file(const std::string& filename) +{ std::ifstream file(filename, std::ios::binary); if (!file) { throw std::runtime_error("Cannot open file: " + filename); @@ -46,11 +60,12 @@ std::string sha256_file(const std::string& filename) { return to_hex_string(hash, SHA256_DIGEST_LENGTH); } -int main(int argc, char* argv[]) { +int main(int argc, char* argv[]) +{ #ifdef _WIN32 #include - std::string load_dll_dir = fs::path(argv[0]).append("mdsha_dll").string(); + std::string load_dll_dir = fs::path(GetExecutablePath()).parent_path().append("mdsha_dll").string(); SetDllDirectory(load_dll_dir.c_str()); #endif @@ -67,7 +82,8 @@ int main(int argc, char* argv[]) { try { if (mode == "-s") { - std::cout << "SHA-256(string): " << sha256_string(input) << std::endl; + std::cout << "SHA-256(string): " << sha256_string(input) + << std::endl; } else if (mode == "-f") { std::cout << "SHA-256(file): " << sha256_file(input) << std::endl; } else {