/* RainbowCrack - a general propose implementation of Philippe Oechslin's faster time-memory trade-off technique. Copyright (C) Zhu Shuanglei */ #ifdef _WIN32 #pragma warning(disable : 4786) #endif #include "Public.h" #ifdef _WIN32 #include #endif ////////////////////////////////////////////////////////////////////// unsigned int GetFileLen(FILE* file) { unsigned int pos = ftell(file); fseek(file, 0, SEEK_END); unsigned int len = ftell(file); fseek(file, pos, SEEK_SET); return len; } string TrimString(string s) { while (s.size() > 0) { if (s[0] == ' ' || s[0] == '\t') s = s.substr(1); else break; } while (s.size() > 0) { if (s[s.size() - 1] == ' ' || s[s.size() - 1] == '\t') s = s.substr(0, s.size() - 1); else break; } return s; } bool ReadLinesFromFile(string sPathName, vector& vLine) { vLine.clear(); FILE* file = fopen(sPathName.c_str(), "rb"); if (file != NULL) { unsigned int len = GetFileLen(file); char* data = new char[len + 1]; fread(data, 1, len, file); data[len] = '\0'; string content = data; content += "\n"; delete data; int i; for (i = 0; i < content.size(); i++) { if (content[i] == '\r') content[i] = '\n'; } int n; while ((n = content.find("\n", 0)) != -1) { string line = content.substr(0, n); line = TrimString(line); if (line != "") vLine.push_back(line); content = content.substr(n + 1); } fclose(file); } else return false; return true; } bool SeperateString(string s, string sSeperator, vector& vPart) { vPart.clear(); int i; for (i = 0; i < sSeperator.size(); i++) { int n = s.find(sSeperator[i]); if (n != -1) { vPart.push_back(s.substr(0, n)); s = s.substr(n + 1); } else return false; } vPart.push_back(s); return true; } string uint64tostr(uint64 n) { char str[32]; #ifdef _WIN32 sprintf(str, "%I64u", n); #else sprintf(str, "%llu", n); #endif return str; } string uint64tohexstr(uint64 n) { char str[32]; #ifdef _WIN32 sprintf(str, "%016I64x", n); #else sprintf(str, "%016llx", n); #endif return str; } string HexToStr(const unsigned char* pData, int nLen) { string sRet; int i; for (i = 0; i < nLen; i++) { char szByte[3]; sprintf(szByte, "%02x", pData[i]); sRet += szByte; } return sRet; } unsigned int GetAvailPhysMemorySize() { #ifdef _WIN32 MEMORYSTATUS ms; GlobalMemoryStatus(&ms); return ms.dwAvailPhys; #endif } void ParseHash(string sHash, unsigned char* pHash, int& nHashLen) { int i; for (i = 0; i < sHash.size() / 2; i++) { string sSub = sHash.substr(i * 2, 2); int nValue; sscanf(sSub.c_str(), "%02x", &nValue); pHash[i] = (unsigned char)nValue; } nHashLen = sHash.size() / 2; } void Logo() { printf("RainbowCrack 1.2 - Making a Faster Cryptanalytic Time-Memory Trade-Off\n"); printf("by Zhu Shuanglei \n"); printf("http://www.antsight.com/zsl/rainbowcrack/\n\n"); }