加密软件调试过程

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
int GetcheckValue(int sz[],int nCount)//传数组,校验数组下标,实际上校验值下标只使用了nCount-1
{
	int ncheckValue=0;
	for (int i = 0; i < nCount; ++i)
	{
		ncheckValue=(sz[i]<<7)+(sz[i]>>21);//异或两次
	}
	return ncheckValue;//返回校验的值
}

int main()
{
	char sz[]="Hello world";
	char ch[]="123456";
	int n=GetcheckValue((int *)sz,strlen(sz)/4);
	for (int i = 0; i < sizeof(sz)-1; ++i)//字符串结尾有0所以长度-1   小于11应为结尾0是不包括在内的   i只执行到10
	{
		sz[i]=sz[i]+ch[i%strlen(ch)];//用函数strlen长度不计算末尾0      strlen(ch)==sizeof(ch)-1
	}
	system("pause");
	return 0;
}

数组初始化内存值
image

ncheckValue=909289315
ncheckValue=-1148175621
ascii码相加   十六进制值相加,内存中调试的话因为signed  unsigned  看到的值也许会是负数,不过没关系,因为看内存只是为了做解密的时候校验每一步是否一致(正确),如果说在写解密的时候写错了的话,通过记录的调试过程可以快速的查错,整理自己逻辑思维。
i==0
i%strlen(ch)==0
sz[0]==72'H'
ch[0]==49'1'
sz[0]==121'y'==0x79
i==1
i%strlen(ch)==1
sz[1]==101'e'
ch[1]==50'2'
sz[1]==-105?==0x97
i==2
i%strlen(ch)==2
sz[2]==108'l'
ch[2]==51'3'
sz[2]==-97?==0xa0
i==3
i%strlen(ch)==3
sz[3]==108'l'
ch[3]==52'4'
sz[3]==-96?==0xa4
i==4
i%strlen(ch)==4
sz[4]==111'o'
ch[4]==53'5'
sz[4]==-92?   ==0xa4
i==5
i%strlen(ch)==5
sz[5]==32' '
ch[5]==54'6'
sz[5]==86'V'==0x56
i==6
i%strlen(ch)==0
sz[6]==119'w'
ch[0]==49'1'
sz[6]==-88   ==0xa8
i==7
i%strlen(ch)==1
sz[7]==111'o'
ch[1]==50'2'
sz[7]==-95?   ==0xa1
i==8
i%strlen(ch)==2
sz[8]==114'r'
ch[2]==51'3'
sz[8]==-91?  ==0xa5
i==9
i%strlen(ch)==3
sz[9]==108'l'
ch[3]==52'4'
sz[9]==-96?  ==0xa0
i==10
i%strlen(ch)==4
sz[10]==100'd'
ch[3]==53'5'
sz[10]==-103?  ==0x99

加密后10进制值
image

加密后16进制值
image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值