#include "StdAfx.h"
#include "CryptTools.h"
#include "Base64.h"
#include "openssl/md5.h"


/*!
	暗号化、復号化
*/
void CCryptTools::CryptRC4(CBinaryData &srcData, CBinaryData &cryptedData, CBinaryData &key)
{
	//	鍵設定
	RC4_KEY rc4key;
	RC4_set_key(&rc4key, key.GetSize(), (unsigned char *)key.GetPtr());

	//	バッファサイズ変更
	cryptedData.ReSize(srcData.GetSize());

	//	暗号化
	RC4(&rc4key, srcData.GetSize(), (unsigned char *)srcData.GetPtr(), (unsigned char *)cryptedData.GetPtr());
}

/*!
	ハッシュ取得
*/
void CCryptTools::GetMD5(CBinaryData &srcData, CBinaryData &hash)
{
	//	バッファ準備
	hash.ReSize(MD5_DIGEST_LENGTH);

	//	MD5実行
	MD5((unsigned char *)srcData.GetPtr(), srcData.GetSize(), (unsigned char *)hash.GetPtr());
}


/*!
	ハッシュ取得(HEX)
*/
CString CCryptTools::GetMD5Hex(CBinaryData &srcData)
{
	//	ハッシュ生成
	CBinaryData	hash;
	GetMD5(srcData, hash);

	//	HEXへ
	CString	ret;
	CBase64::EncodeHEXbin(hash, ret);

	return(ret);
}

/*!
	ハッシュ取得(HEX)
*/
CString CCryptTools::GetMD5HexFromStr(CString srcStr)
{
	CBinaryData	temp;
	temp.AppendString(srcStr);

	return(GetMD5Hex(temp));
}

