bool EncodingTable::load(const std::wstring& fileName, TextFile::Encoding encoding) { unsigned char hexBuffer[MAXHEXLENGTH]; TextFile input; if (input.open(fileName,TextFile::Read,encoding) == false) return false; hexData.clear(); valueData.clear(); entries.clear(); setTerminationEntry((unsigned char*)"\0",1); while (!input.atEnd()) { std::wstring line = input.readLine(); if (line.empty() || line[0] == '*') continue; if (line[0] == '/') { std::wstring hex = line.substr(1); if (hex.empty() || hex.length() > 2*MAXHEXLENGTH) { // error continue; } int length = parseHexString(hex,hexBuffer); if (length == -1) { // error continue; } setTerminationEntry(hexBuffer,length); } else { size_t pos = line.find(L'='); std::wstring hex = line.substr(0,pos); std::wstring value = line.substr(pos+1); if (hex.empty() || value.empty() || hex.length() > 2*MAXHEXLENGTH) { // error continue; } int length = parseHexString(hex,hexBuffer); if (length == -1) { // error continue; } addEntry(hexBuffer,length,value); } } return true; }
int main(int argc, char const *argv[]) { uint8_t* input = parseHexString("1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736", 68); int inputlen = 34; char* message = breakSingleXOR(input, inputlen); printf("Message: %s\n", message); free(message); return 0; }
int main() { unsigned char* plaintext = "1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736"; unsigned char* plaintextDecoded; int size = parseHexString(plaintext, &plaintextDecoded); char key = solveSingleByteXor(plaintextDecoded, size); unsigned char* decrypted; singleByteXor(plaintextDecoded, key, size, &decrypted); printf("%s\n", decrypted); return 0; }
static p_str* parseRegularString(FILE *file) { unsigned int len, p; int ch; p_str *ret; uint8_t buf[BUFFSIZE]; bool skip = false; ch = parseWhiteSpace(file); if(ch == '(') { p = 1; ch = getc(file); for(len=0; len < BUFFSIZE && p > 0 && ch != EOF; len++) { buf[len] = ch; if(skip == false) { if(ch == '(') p++; else if(ch == ')') p--; if(ch == '\\') skip = true; } else skip = false; ch = getc(file); } ungetc(ch, file); ret = objStringToByte(buf, len); } else if(ch == '<') { len = 0; while(ch != '>' && len < BUFFSIZE && ch != EOF) { if((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F')) { buf[len++] = ch; } ch = getc(file); } ungetc(ch,file); ret = parseHexString(buf,len); } else ret = NULL; return ret; }