90 lines
2.5 KiB
C++
90 lines
2.5 KiB
C++
|
//#pragma title( "Cipher.cpp - Very simple cipher for encryption" )
|
||
|
/*
|
||
|
Copyright (c) 1995-1998, Mission Critical Software, Inc. All rights reserved.
|
||
|
===============================================================================
|
||
|
Module - Cipher.cpp
|
||
|
System - Common
|
||
|
Author - Tom Bernhardt
|
||
|
Created - 1996-01-21
|
||
|
Description - Very simple Cipher routine for network packet password
|
||
|
encryption. This is a symmetrical cipher where applying
|
||
|
it twice will revert it to its orignial form. One of its
|
||
|
functions is a one's complement so it assumes that no char
|
||
|
will have the value of '\xff' to erroneously pre-terminate
|
||
|
the resultant string.
|
||
|
|
||
|
NOTE: This is obviously so simple that it can be easily
|
||
|
cracked by either single stepping the code or comparing sequences
|
||
|
of known values and their encrypted result. Its only use
|
||
|
is to keep out the casual observer/hacker. It should be replaced
|
||
|
by heavy public key encryption when possible.
|
||
|
|
||
|
Updates -
|
||
|
===============================================================================
|
||
|
*/
|
||
|
#include <windows.h>
|
||
|
#include "Cipher.hpp"
|
||
|
|
||
|
void
|
||
|
SimpleCipher(
|
||
|
WCHAR * str // i/o-string to encrypt
|
||
|
)
|
||
|
{
|
||
|
WCHAR * c;
|
||
|
|
||
|
// exchange nibbles and NOT result or each char
|
||
|
for ( c = str; *c; c++ )
|
||
|
*c = ~( *c >> 4 | *c << 4 );
|
||
|
|
||
|
// exchange chars around middle
|
||
|
for ( --c; c > str; c--, str++ )
|
||
|
{
|
||
|
*c ^= *str;
|
||
|
*str ^= *c;
|
||
|
*c ^= *str;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void
|
||
|
SimpleCipher(
|
||
|
char unsigned * str // i/o-string to encrypt
|
||
|
)
|
||
|
{
|
||
|
char unsigned * c;
|
||
|
|
||
|
// exchange nibbles and NOT result or each char
|
||
|
for ( c = str; *c; c++ )
|
||
|
*c = ~( *c >> 4 | *c << 4 );
|
||
|
|
||
|
// exchange chars around middle
|
||
|
for ( --c; c > str; c--, str++ )
|
||
|
{
|
||
|
*c ^= *str;
|
||
|
*str ^= *c;
|
||
|
*c ^= *str;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void
|
||
|
SimpleCipher(
|
||
|
char unsigned * str ,// i/o-string to encrypt
|
||
|
int len // in -length of string
|
||
|
)
|
||
|
{
|
||
|
char unsigned * c;
|
||
|
|
||
|
// exchange nibbles and NOT result or each char
|
||
|
for ( c = str; len--; c++ )
|
||
|
*c = ~( *c >> 4 | *c << 4 );
|
||
|
|
||
|
// exchange chars around middle
|
||
|
for ( --c; c > str; c--, str++ )
|
||
|
{
|
||
|
*c ^= *str;
|
||
|
*str ^= *c;
|
||
|
*c ^= *str;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Cipher.cpp - end of file
|