吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1393|回复: 0
收起左侧

[C&C++ 转载] 个人用密码算法

[复制链接]
Minister 发表于 2021-1-21 22:39
本帖最后由 Minister 于 2021-1-22 11:24 编辑

写这初衷:
1.学以致用。将理论转化为实际,真写起来,会发现:语法不熟悉,盲区,扣字还慢
2.现实需要。通用算法不好吗?好,否则不能通用;自写算法好吗?不好,也好。适合的最好
启发来源:
ASCII转数字 进制转换


以下为代码,直击结果,中间的逻辑判断,没写。
[C] 纯文本查看 复制代码
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
int main (void)
{
    char a[6][7] = {{"012~34"},{"abced#"},{"FGHIJ-"},{"klmnop"},{"qrstu."},{"VWXYZ+"}};
    char b[6][7] = {{"ABCDE@"},{"fghij&"},{"KLMNOP"},{"QRSTU/"},{"vwxyz*"},{"667?89"}};
    int p[4]={279936,1679616,10077696,362797056};//判断密文位数 此数据得得出是 6的8、9、10、11次方
    int h=6,m=0,n,s=0,c,max,min,type,tmp,len;
    char str[8];
    printf("待加密[限制8位]:");
    scanf("%s",str);
    len=1;//生成密码为9位
    for(int x=0;x<strlen(str);x++){
        m+=int(str[x]);
        }

    if(m<p[len]){        //判断明文转进制后,是否满足密文N位数最小值,折中取值 此步骤为构造
           min=p[len]/m;
           max=p[len+1]/m;
           tmp=(min+max)/2;
           m=m*tmp;
    }

        do{                //在多维数组碰撞,生密文 此步骤为构造
        n=m%h;
        m=m/h;
        c=m%6;
            printf("%c",(s%2==0)?a[c][n]:b[c][n]);
            s++;
    }while(m!=0);


        return 0;
}

今天抛个砖,既希望没砸到人,也希望引出更多爱好者的"创造性"之玉:
1.帮我完善下逻辑,群力之所举则无不胜
2.思考:是否可逆
3.思考:密文是否具有唯一性
一起加油鸭!

{:1_892:} :handshake

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 17:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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