ModEnc is currently in Maintenance Mode: Changes could occur at any given moment, without advance warning.
XWIS:APGAR: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
APGAR is a token sent by a C&C game to tell XWIS the players' password. The password is encrypted using a weak algorithm. | APGAR is a token sent by a C&C game to tell XWIS the players' password. The password is encrypted using a weak algorithm. | ||
<pre> | <pre> | ||
string apgar( | string apgar(input) { | ||
lookup = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" | lookup = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" | ||
out = "" | out = "" | ||
i = 1 | i = 1 | ||
while (i <= 8) | while (i <= 8) | ||
left = input[i] | left = ascii value of input[ i ] | ||
right = input[length[input] - i | right = ascii value of input[ length[input] - i ] | ||
x = | if left is odd | ||
x = ((left * 2) XOR (left AND 1)) AND right | |||
else | |||
x = left XOR right | |||
out += lookup[x | out += lookup[x AND 63] | ||
i++ | i++ | ||
return out | |||
</pre> | |||
A C++ implementation of this algorithm: | |||
<pre> | |||
std::string apgar(std::string input) { | |||
std::string lookup = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; | |||
std::string out = ""; | |||
int i = 0; | |||
while (i < 8) { | |||
unsigned char left = input[i]; | |||
unsigned char right = input[input.length() - i]; | |||
unsigned char x = left & 1 ? ((left << 1) ^ (left & 1)) & right : left ^ right; | |||
out += lookup[x & 63]; | |||
i++; | |||
} | } | ||
return out | return out; | ||
} | } | ||
</pre> | |||
Example (decrypted password "reneproj"): | |||
<pre> | |||
apgar Ykbcaxop 0 | |||
</pre> | </pre> | ||
The closing zero seems to have no special function. | |||
[[Category:XWIS Protocol]] | [[Category:XWIS Protocol]] |
Revision as of 22:03, 18 June 2008
APGAR is a token sent by a C&C game to tell XWIS the players' password. The password is encrypted using a weak algorithm.
string apgar(input) { lookup = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" out = "" i = 1 while (i <= 8) left = ascii value of input[ i ] right = ascii value of input[ length[input] - i ] if left is odd x = ((left * 2) XOR (left AND 1)) AND right else x = left XOR right out += lookup[x AND 63] i++ return out
A C++ implementation of this algorithm:
std::string apgar(std::string input) { std::string lookup = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; std::string out = ""; int i = 0; while (i < 8) { unsigned char left = input[i]; unsigned char right = input[input.length() - i]; unsigned char x = left & 1 ? ((left << 1) ^ (left & 1)) & right : left ^ right; out += lookup[x & 63]; i++; } return out; }
Example (decrypted password "reneproj"):
apgar Ykbcaxop 0
The closing zero seems to have no special function.