typedef unsigned long DWORD;
typedef unsigned char BYTE;
//加解密常量
const DWORD c_dwConst = 0x61C88647;
void yt_code(BYTE* pDst, BYTE* pSrc,int nSrcLen);
void yt_encode(BYTE* pDst, BYTE* pSrc, int nSrcLen);
//加解密KEY数组,全局变量
DWORD g_dwKeyArray[4];
int main()
{
BYTE byKey1[] = {0x5D, 0x42, 0x73, 0x50, 0x59, 0x7E, 0x7F, 0x7C, 0x45, 0x3A, 0x4B, 0x38, 0x41, 0x76, 0x47, 0x74};
BYTE byKey2[] = {0x34, 0x80, 0x1C, 0x64, 0xEE, 0x26, 0xA6, 0xCB, 0x24, 0x8F, 0x69, 0xAF, 0x41, 0x0B, 0x73, 0x4C};
BYTE byKey3[] = {0xE4 ,0x55 ,0xAA ,0xD2 ,0xB1 ,0x3E ,0x9C ,0xED ,0x5A ,0xD3 ,0x69 ,0xAF ,0x41 ,0x0B ,0x73 ,0x4C};
//赋值给KEY数组
for(int i = 0 ; i < 4 ; i++)
memcpy((BYTE*)&g_dwKeyArray[i],byKey2 + i * 4, 4);
//加密测试
BYTE pTest1[24] = {0x5 ,0x0 ,0x31 ,0x32 ,0x33 ,0x34 ,0x35 ,0x36 ,0x0 ,0x0 ,0x0 ,0x31 ,0x32 ,0x33 ,0x34 ,0x35 ,0x36 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0};
BYTE* pTestRes1 = new BYTE[24]();
yt_code(pTestRes1, pTest1,24);
delete pTestRes1;
//解密测试
BYTE pTest2[8] = {0x7, 0x52, 0xC0, 0x80, 0x6D, 0x62, 0xF4, 0xA9};
BYTE* pTestRes2 = new BYTE[8]();
yt_encode(pTestRes2,pTest2,8);
delete pTestRes2;
return 0;
}
void yt_code(BYTE* pDst, BYTE* pSrc,int nSrcLen)
{
int nCnt = nSrcLen >> 3;
DWORD dwBeg, dwBack;
DWORD dwTempA, dwTempB, dwTempC;
for(int i = 0; i < nCnt; i++)
{
memcpy((BYTE*)&dwBeg,pSrc + i * 8,4);
memcpy((BYTE*)&dwBack,pSrc + i * 8 + 4 ,4);
DWORD dwEsi = 0;
for(int j = 16; j >0; j--)
{
dwTempA = dwBack + dwEsi;
dwTempB = dwTempA ^ g_dwKeyArray[0];
dwTempA = dwBack << 4;
dwTempB += dwTempA;
dwTempA = dwBack >> 5;
dwTempA += g_dwKeyArray[1];
dwTempC = dwTempB ^ dwTempA;
dwBeg += dwTempC;
dwEsi -= c_dwConst;
dwTempA = dwBeg + dwEsi;
dwTempB = dwTempA ^ g_dwKeyArray[2];
dwTempA = dwBeg << 4;
dwTempB += dwTempA;
dwTempA = dwBeg >> 5;
dwTempA += g_dwKeyArray[3];
dwTempC = dwTempB ^ dwTempA;
dwBack += dwTempC;
}
memcpy(pDst + i * 8,(BYTE*)&dwBeg,4);
memcpy(pDst + i * 8 + 4,(BYTE*)&dwBack,4);
}
return;
}
void yt_encode(BYTE* pDst, BYTE* pSrc, int nSrcLen)
{
int nCnt = nSrcLen >> 3;
DWORD dwBeg, dwBack;
DWORD dwTempA, dwTempB, dwTempC;
for(int i = 0 ; i < nCnt ; i++)
{
memcpy((BYTE*)&dwBeg,pSrc + i * 8, 4);
memcpy((BYTE*)&dwBack,pSrc + i * 8 + 4 ,4);
DWORD dwEsi = 0xE3779B90;
for(int n = 16; n > 0; n--)
{
dwTempA = dwBeg + dwEsi;
dwTempB = dwTempA ^ g_dwKeyArray[2];
dwTempA = dwBeg << 4;
dwTempB += dwTempA;
dwTempA = dwBeg >> 5;
dwTempA += g_dwKeyArray[3];
dwEsi +=c_dwConst;
dwTempC = dwTempB ^ dwTempA;
dwBack -= dwTempC;
dwTempA = dwBack + dwEsi;
dwTempB = dwTempA ^ g_dwKeyArray[0];
dwTempA = dwBack << 4;
dwTempB += dwTempA;
dwTempA = dwBack >> 5;
dwTempA += g_dwKeyArray[1];
dwTempC = dwTempB ^ dwTempA;
dwBeg -= dwTempC;
}
memcpy(pDst + i * 8,(BYTE*)&dwBeg, 4);
memcpy(pDst + i * 8 + 4,(BYTE*)&dwBack, 4);
}
return;
}
相关推荐
300多种加密解密算法(C++)源代码
300多种加密解密算法(C++)源代码 300多种加密解密算法(C++)源代码
tea系列加密算法学习笔记
tea系列加密算法概述tea算法xtea算法xxtea算法总结 概述 最近在做ctf逆向的题目中多次遇到了该算法,因此打算重写一篇完整的博客来详细学习下该算法。 TEA(Tiny Encryption Algorithm),是一种分组加密算法,实现过程比较简单,从其名字也能看出这是一种微型的加密算法,效率极高。该系列一共有三种算法,tea --> xtea --> xxtea,从右往左依次是前面的升级版。此系列算法都使用了一个神秘常数作为倍数,源于黄金比率,程序中一般写作0x9E3779
各种加解密算法c++源码
各种加解密算法c++源码,AES,DES,RSA512,RSA1024,RSA2048,SHA等等
171207 逆向-JarvisOJ(病毒数据分析)(2)
1625-5 王子昂 总结《2017年12月7日》 【连续第433天总结】 A. JarvisOJ-Re-病毒数据分析(2) B. 继续分析 加密算法的识别插件没有识别出来,只能自己来查找了 核心函数sub_401AD0的算法中出现了一个特征常数:v12 -= 0x61C88647;百度其发现它可能是RC5、RC6、TEA加密算法,常数通常为加法,以下式出现+0x9e3779b9;RC算
常见加密算法浅析
DES3加密仿真结果: 解密仿真结果: 用软件验证结果正确。 DES: 明文/密文:64bits; 秘钥:56bits+8bits(校验值) 1. 64bits初始P置换,然后拆分为两个32bits,Li,Ri; Ri=Li-1f(Ri-1,Ki) Li=Ri-1 2. f运算f(Ri-1,Ki) f(A,J):A为32bit,J是48bit
加密解密算法之base64
base64编解码
c++加解密算法总结
数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。非对称加密算法需要两个密钥来进行加密和解密,分别是公钥和私钥。公钥和私钥成对存在,如果用公钥对数据进行加密,那么只有使用对应的私钥才能解密。
【C++】简单的C++加解密算法
利用位异或计算的对称性,采用appkey和appsecret进行异或计算,达到加解密的效果。
0x61c8847的秘密
0x61c88647的秘密 摘要 :java1.4之前,ThreadLocals处于其对于高性能代码无用的线程争论。在新的设计中,每一个线程包含自己的ThreaLocalMap,这对于性能的提升是全面的,然而,我们依然面临着由于长时间运行线程的ThreadLocalMap的值没有被清理导致的内存泄露问题。 我注意到在我的java专业硕士课程的示例中,并不是每次ThreadLocal...
为什么使用0x61c88647
在Java1.4之前,ThreadLocals会导致线程之间发生竞争。在新的设计里,每一个线程都有他们自己的ThreadLocalMap,用来提高吞吐量,然而,我们仍然面临内存泄漏的可能性,因为长时间运行线程的ThreadLocalMap中的值不会被清除 在Java的早期版本中,ThreadLocals在多个线程进行访问的时候存在竞争问题,使得它们在多核应用程序中几乎无用。在Java 1.4中,引...
AES加解密之C++实现
一、AES介绍 AES,高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图: 下面简单介绍下各个部分的作用与意义: 明文P 没有经过加密的数据。 密钥K 用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给
C++版 DES加解密算法,3DES加解密算法,MAC算法
C++版 DES加解密算法,3DES加解密算法,MAC算法 适合金融行业加解密计算,等操作
Metin2 Client Source
Metin2 Client Source
简单的加密/解密算法_/c++
关于加密和解密问题,有的加密算法是不存在解密算法的(原因就是加密算法的不可逆性,即无法通过算法将密文还原),有的加密存在解密算法(原因是其加密过程是可逆的,即可以通过逆向算法将密文还原)。然而单独的一种加密算法不一定可靠,这时可以将多种加密算法组合使用。至于相关的加密算法各位自己去了解。 下面介绍一个简单的加密/解密算法实例,希望对此加密解密算法有一定认识: ...
C语言实现RC4加密算法
加密原理 Rc4加密步骤 1、先初始化状态向量S(256个字节,用来作为密钥流生成的种子1) 按照升序,给每个字节赋值0,1,2,3,4,5,6…,254,255 2、初始密钥(由用户输入),长度任意 如果输入长度小于256个字节,则进行轮转,直到填满 例如输入密钥的是1,2,3,4,5 , 那么填入的是1,2,3,4,5,1,2,3,4,5,1,2,3,4,5… 由上述轮转过程得到...
c++实现AES加密解密算法
本文讲解c++实现AES加密解密功能,主要包含两部分: 实现AES加密解密功能的静态库 实现调用静态库的测试文件 本文代码是在win10系统,VS2013下调试。 一、AES加解密静态库 创建静态库工程CAesLib 创建外部调用类CAes256 #ifndef ENCRYPT_DECRYPT_H #define ENCRYPT_DECRYPT_H #include <string> using namespace std; class CAes256 { public: CAe
c++生成公钥和私钥并对字符串加密和解密
// CreatRsaTest.cpp : Defines the entry point for the console application. // #include "stdafx.h" // // //int _tmain(int argc, _TCHAR* argv[]) //{ // return 0; //} #include #include //#in
C++加密解密库之选择
项目中有这样一个需求,客户端登陆服务器时,为保证信息安全,需要对用户的密码进行加密传输,在服务器端接受到之后进行相应的解密。 一、加密算法分类 对称加密算法、不对称加密算法、不可逆加密算法 1、对称加密算法 特点:较早、技术成熟原理: 数据发信方将明文和加密秘钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去;收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆...
关于HOOK WINAPI函数
有时候要研究游戏封包或者需要对其进行修改,则最好的方法是HOOK他的网络API函数,如用于发送封包的send函数和 用于接受的recv,WSARecv函数等等。 将HOOK代码写到DLL中,然后通过修改游戏运行程序的输入表去加载这个dll从而达到劫持API的作用! 修改PE文件的输入表方法:最简单的就是试用PE工具LordPE了,打开程序,选择目录,点击输入表,然后右键增加输入表
4722




被折叠的 条评论
为什么被折叠?



