📄 rc4.cpp
字号:
// Rc4.cpp: implementation of the CRc4 class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "030300816.h"
#include "Rc4.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CRc4::CRc4()
{
// m_iStream = 0;
// m_jStream = 0;
}
CRc4::~CRc4()
{
}
void CRc4::Decipher()
{
m_iStream = 0;
m_jStream = 0;
CString temp = _T("");
CString plainTemp = _T("");
long chTemp = 0;
char ch;
for ( int i = 0 ; i < m_cipherString.GetLength() ; )
{
bitset<8> m_K(NextRand());
for ( int j = 0 ; j < 8 ; j ++ )
{
ch = m_cipherString.GetAt( i );
if ( ( ch == '1' && m_K[7-j] == 1 )
||
( ch == '0' && m_K[7-j] == 0 ) )
temp += "0";
else
temp += "1";
i ++;
}
chTemp = StrToData( temp , 2 );
plainTemp += (char)chTemp;
}
m_plainString = plainTemp;
}
void CRc4::Encipher()
{
m_iStream = 0;
m_jStream = 0;
CString temp=_T("");
for ( int i = 0 ; i < m_plainString.GetLength() ; i ++ )
{
bitset<8> m_K(NextRand());
char ch = (char)m_plainString.GetAt( i );
char tt = 0x01;
char bi[8];//convert char to bi[8] in binary
for ( int p = 0 ; p < 8 ; p ++ )
{
if ( ch & tt )
bi[7-p] = '1';
else
bi[7-p] = '0';
tt <<= 1;
}
for ( int k = 0 ; k < 8 ; k ++ )
{
if ( ((m_K[7-k] == 1 )&& (bi[k] == '1'))
||
((m_K[7-k] == 0 )&& (bi[k] == '0'))
)
temp+="0";
else
temp+="1";
}
}
m_cipherString = temp;
}
UINT CRc4::NextRand()
{
UINT t;
m_iStream = ( m_iStream + 1 ) % 256;
m_jStream = ( m_jStream + m_S[m_iStream] ) % 256;
t = m_S[m_iStream]; m_S[m_iStream] = m_S[m_jStream]; m_S[m_jStream] = t;
t = ( m_S[m_iStream] + m_S[m_jStream] ) % 256;
return m_S[t];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -