天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 61|回复: 0

一个密码转换为多种加密ASCII字符组合。

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
原理:生成小于10的随机数,把输入字符按条件加上对应的随机数和位置号,最后把生成字符+随机数生成密码输出。
代码如下(示例仅使用2个随机数):

CString input = "123456";
int num = strlen(input);
char str[100];
Rand1 = rand() % 8 + 1;
Rand2 = rand() % 9;

for (int i = 0; i < num + 1; i++)
{
        if (i < num)
        {
                if (i % 2 == 0)
                {
                        ascii = (int)input[i] + Rand1 + i;
                }
                else if (i % 2 == 1)
                {
                        ascii = (int)input[i] + Rand2 + i;
                }

                if (ascii > 126)
                {
                        ascii = ascii - 126 + 32;
                }
                str[i] = (char)ascii;
        }
        else
        {
                str[i] = (char)(Rand1 + (rand() % 7 + 4) * 10);
                str[i + 1] = (char)(Rand2 + (rand() % 7 + 4) * 10);
        }
}

input.Format("%s", str);
CString output = input.Left(num + 2);



二、解码
原理:解析密码中的随机数,按加密规则逆向解密。
代码如下:

char str[100];
int num = strlen(inputRaw); //inputRaw: CString,加密字符
CString input = inputRaw.Right(2);
Rand1 = input[0] % 10;
Rand2 = input[1] % 10;
input = inputRaw.Left(num - 2);

for (int i = 0; i < num - 2; i++)
{
        if (i % 2 == 0)
        {
                ascii = (int)input[i] - Rand1 - i;
        }
        else
        {
                ascii = (int)input[i] - Rand2 - i;
        }

        if (ascii < 33)
        {
                ascii = ascii + 126 - 32;
        }
        str[i] = (char)ascii;
}
inputRaw.Format("%s", str);
CString output = inputRaw.Left(num - 2);

 

 

 

 

一个密码转换为多种加密ASCII字符组合。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 09:30 , Processed in 0.140409 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表