Most up to date source code:
Code: Select all
#include <string>
#include <iostream>
#include <cstring>
#include "crypt.c"
using namespace std;
extern "C"
{
char *_crypt(char *pw, char *salt);
}
//Generate password and salt for tripcode
void generateTripcode( string& input ) {
string salt, tripcode;
input += "H..";
salt = input.substr( 1,2 );
for( int index = 0; index < (signed)salt.length(); index++ ) {
if( (int)salt[index] < 46 || (int)salt[index] > 122 ) {
salt.replace( index, index+1, 1, '.' );
}
else {
switch( salt[index] ) {
case ':': salt.replace( index, index+1, 1, 'A' );break;
case ';': salt.replace( index, index+1, 1, 'B' );break;
case '<': salt.replace( index,index+1, 1, 'C' ); break;
case '=': salt.replace( index,index+1, 1 , 'D' ); break;
case '>': salt.replace( index,index+1, 1 , 'E' ); break;
case '?': salt.replace( index,index+1, 1 , 'F' ); break;
case '@': salt.replace( index,index+1, 1 , 'G' ); break;
case '[': salt.replace( index,index+1, 1 , 'a' ); break;
case '\\': salt.replace( index,index+1, 1, 'b' ); break;
case ']': salt.replace( index,index+1, 1, 'c' ); break;
case '^': salt.replace( index,index+1, 1, 'd' ); break;
case '_': salt.replace( index,index+1, 1, 'e' ); break;
case '`': salt.replace( index,index+1, 1, 'f' ); break;
default: break;
}
}
}
input = input.erase( input.size()-3, input.size() );
//Convert input string to char array i
char *i = new char[input.size()+1];
i[input.size()] = 0;
memcpy( i, input.c_str(), input.size() );
//Convert salt string to char array s
char *s = new char[salt.size()+1];
s[salt.size()] = 0;
memcpy( s, salt.c_str(), salt.size() );
//Output original input and salt
cout << "Password = " << input << endl;
cout << "Salt = " << salt << endl;
tripcode = crypt(i, s);
tripcode = tripcode.substr( tripcode.size() - 10, tripcode.size() );
cout << "Tripcode: !" << tripcode;
}
int main()
{
string input;
char garbage;
cout << "Input Password: \n";
cin >> input;
generateTripcode( input );
cout << "\n";
cout << "\n";
cout << "Press any key to continue...";
cin >> garbage;
return 0;
}
Comments (particularly on efficiency) and questions are welcome.
Sample test: Milestones
- Correctly generate salt from plaintext - [Done]
- Correctly generate tripcode from given plaintext - [Done]
- Find or implement efficient string class
- Implement key generator
- Refine crypt.c to use Bitslicing
- Refine crypt.c to use bit slicing on CUDA
- Implement GUI user interface