From 556b463a79594c4a90e12237d6d5212d460f41d1 Mon Sep 17 00:00:00 2001 From: Stefan Suhren Date: Tue, 5 May 2015 15:32:05 +0200 Subject: Add the best self written RC4 algo and use it for encryption --- src/crypt/cryptrc4.cpp | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) (limited to 'src/crypt/cryptrc4.cpp') diff --git a/src/crypt/cryptrc4.cpp b/src/crypt/cryptrc4.cpp index 701525d..88806c8 100644 --- a/src/crypt/cryptrc4.cpp +++ b/src/crypt/cryptrc4.cpp @@ -1,5 +1,14 @@ #include "cryptrc4.h" +void swap(RC4_INT &a, RC4_INT &b) +{ + RC4_INT tmp; + + tmp = a; + a = b; + b = tmp; +} + CryptRc4::CryptRc4() { @@ -10,10 +19,47 @@ void CryptRc4::rc4SetKey(QByteArray key) RC4_set_key(&m_rc4Key, key.length(), (const unsigned char *) key.data()); } +void CryptRc4::rc4SetKeyOwn(QByteArray key) +{ + m_rc4Key.x = 0; + m_rc4Key.y = 0; + + for(RC4_INT i = 0; i < 256; i++) + { + m_rc4Key.data[i] = i; + } + RC4_INT j = 0; + for(RC4_INT i = 0; i < 256; i++) + { + j = (j + m_rc4Key.data[i] + key[i % key.length()]) % 256; + swap(m_rc4Key.data[i], m_rc4Key.data[j]); + } +} + QByteArray CryptRc4::rc4Run(QByteArray clear) { QByteArray crypt(clear); - RC4(&m_rc4Key, clear.length(), (const unsigned char *) clear.data(), (unsigned char *) crypt.data()); + RC4(&m_rc4Key, clear.length(), (const unsigned char *) clear.data(), + (unsigned char *) crypt.data()); + return crypt; +} + +QByteArray CryptRc4::rc4RunOwn(QByteArray clear) +{ + QByteArray crypt(clear); + + RC4_INT i = 0; + RC4_INT j = 0; + for(int k = 0; k < crypt.length(); k++) + { + i = (i + 1) % 256; + j = (j + m_rc4Key.data[i]) % 256; + + swap(m_rc4Key.data[i], m_rc4Key.data[j]); + + crypt[k] = crypt[k] ^ m_rc4Key.data[(m_rc4Key.data[i] + m_rc4Key.data[j]) % 256]; + } + return crypt; } -- cgit v1.2.3-70-g09d2