⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arc4.cpp

📁 一个俄国人实现的数据库系统
💻 CPP
字号:
// arc4.cpp - written and placed in the public domain by Wei Dai// The ARC4 algorithm was first revealed in an anonymous email to the// cypherpunks mailing list. This file originally contained some// code copied from this email. The code has since been rewritten in order// to clarify the copyright status of this file. It should now be// completely in the public domain.#include "pch.h"#include "arc4.h"NAMESPACE_BEGIN(CryptoPP)ARC4::ARC4(const byte *key, unsigned int keyLen)	: m_state(256), m_x(0), m_y(0){	unsigned int i;	for (i=0; i<256; i++)		m_state[i] = i;	unsigned int keyIndex = 0, stateIndex = 0;	for (i=0; i<256; i++)	{		unsigned int a = m_state[i];		stateIndex += key[keyIndex] + a;		stateIndex &= 0xff;		m_state[i] = m_state[stateIndex];		m_state[stateIndex] = a;		if (++keyIndex >= keyLen)			keyIndex = 0;	}}ARC4::~ARC4(){	m_x=0;	m_y=0;}byte ARC4::GenerateByte(){	m_x = (m_x+1) & 0xff;	unsigned int a = m_state[m_x];	m_y = (m_y+a) & 0xff;	unsigned int b = m_state[m_y];	m_state[m_x] = b;	m_state[m_y] = a;	return m_state[(a+b) & 0xff];}byte ARC4::ProcessByte(byte input){	return input ^ ARC4::GenerateByte();}void ARC4::ProcessString(byte *outString, const byte *inString, unsigned int length){	byte *const s=m_state;	unsigned int x = m_x;	unsigned int y = m_y;	while(length--)	{		x = (x+1) & 0xff;		unsigned int a = s[x];		y = (y+a) & 0xff;		unsigned int b = s[y];		s[x] = b;		s[y] = a;		*outString++ = *inString++ ^ s[(a+b) & 0xff];	}	m_x = x;	m_y = y;}void ARC4::ProcessString(byte *inoutString, unsigned int length){	byte *const s=m_state;	unsigned int x = m_x;	unsigned int y = m_y;	while(length--)	{		x = (x+1) & 0xff;		unsigned int a = s[x];		y = (y+a) & 0xff;		unsigned int b = s[y];		s[x] = b;		s[y] = a;		*inoutString++ ^= s[(a+b) & 0xff];	}	m_x = x;	m_y = y;}MARC4::MARC4(const byte *userKey, unsigned int keyLength, unsigned int discardBytes)	: ARC4(userKey, keyLength){	while (discardBytes--)		MARC4::GenerateByte();}NAMESPACE_END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -