#include <stdio.h>
/// <summary>
/// 两次异或法加密字符串,缺陷是ch变量的字符不能出现在key中,不然计算成0,无法还原
/// </summary>
/// <param name="ch"></param>
/// <param name="key"></param>
void EncryptAndDecode(char ch[], char key[])
{
for (int i = 0; ch[i]; ++i)
ch[i] ^= key[i % 7];
}
/// <summary>
/// 四位前后两位相互交换法,加密字符串
/// </summary>
/// <param name="ch"></param>
void EncryptAndDecode2(unsigned char ch[])
{
for (int i = 0; ch[i]; ++i)
ch[i] = (ch[i] << 4) | (ch[i] >> 4);
}
/// <summary>
/// 转化成16进制加密法
/// </summary>
void EncryptAndDecode3()
{
unsigned char ch[] = "原始字符串";
for (int i = 0; ch[i]; ++i)
printf("0x%x,", ch[i]);//转化成16进制
printf("\n");
//unsigned char 保证输出的16进制数是两位的,不然就是8位的
char chr[] = { 0xce,0xd2,0xb0,0xae,0xc4,0xe3,0xd6,0xd0,0xb9,0xfa,00 };//这里存放上面的16进制
printf("%s", chr);//这里又还原成原字符串
}
void test1()
{
char key[] = { '[',']','{','}','<','>','|' };
char ch[] = "我爱你中国";
printf("%s\n", ch);
EncryptAndDecode(ch, key);
printf("%s\n", ch);
EncryptAndDecode(ch, key);
printf("%s\n", ch);
}
void test2()
{
unsigned char ch[] = "我爱你中国";
EncryptAndDecode2(ch);
printf("%s\n\n", ch);
EncryptAndDecode2(ch);
printf("%s\n\n", ch);
}
int main()
{
//test1();
//test2();
EncryptAndDecode3();
getchar();
return 0;
}