MQC加密法

· · 个人记录

前言:此解密算法于2023年学校无聊的数学课上创作完成,耗时一小时,令全班惊叹,现在我把它总结出来,供大家使用。

说实话,一开始我和班里的各种队委用它对付班上一个特别爱骂人的,把想骂他的话加密后写在纸上,再扔给他,这样就既能不被举报骂人,又能骂那个讨厌鬼了

(实际上,那个骂人的知道我们在骂他,就把纸条给了班主任。班主任对着纸条瞪了一分钟,愣是没明白这是啥意思,于是扔进了垃圾桶。我们在一边儿笑趴了~哈哈哈哈!)

好了,正文开始!

Part 1:定义新运算

加密法就要有个特殊符号,现在向大家隆重推出qc符号!

此符号全名“取余乘”,长这个样:o|x,给个图↓

它的作用是这样的:A o|x B = A % B × B

举个栗子:5 o|x 3 = 5 % 3 × 3 = 2 × 3 = 6

这里有一些需要注意的地方:

  1. 这种运算读作qc,但写作o|x,可以理解为把%竖过来,并把右边的圆圈改成乘号。

Part 2:字母对应的数字

其实就是这个字母排在字母表的第几个,给张表:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

明白了吗?

注意事项:大小写字母不区分,根据语境自己思考大写还是小写

Part 3:加密格式

注意,这一部分很重要!

我们把每个字母对应的数字用qc加密成一段,每一段用[]括起来,多个[]组成一个字符串。如果要加密的内容是汉语拼音,还要在最后一个[]后加一个{},{}里写一个数字表示声调(1 2 3 4),轻声就作为四声来表示。如果是英文单词,或者特殊含义,就无需加。

汉语拼音:[...][...][...]{}

英文单词:[...][...][...][...][...][...]

注:...是字母对应的数字通过qc加密后的字符串。

Part 4:加密方法

例:大傻子

①将每个转化成汉语拼音,并在最后加上{},里面是这个字的声调。da{4} sha{3} zi{1}

②将每个字母都用[]括起来,并且转化成数字。[4][1]{4} [19][8][1]{3} [26][9]{1}

③把每个数字用qc加密,比如4就可以加密成5 o|x 4,但也可以加密成(3 o|x 2)^2,这一步只要结果正确,可以有加密者自行加密。(但一个字里至少要出现两次qc)[5 o|x 4][1]{4} [8 o|x 6][6 o|x 4][1]{3} [15 o|x 13][6 o|x 3]{1}

④最后,把它写在纸上吧~

考虑到手写太费手和脑子了,我给各位写了一份加密程序。

#include <bits/stdc++.h>
using namespace std;
void fun(char s)
{
    int a = s - 'a' + 1;
    printf("[");
    switch(a)
    {
        case 1:printf("1]");break;
        case 2:printf("3 o|x 2]");break;
        case 3:printf("2^2 - 1]");break;
        case 4:printf("5 o|x 3 - 2]");break;
        case 5:printf("6 o|x 4 * 5 / 8]");break;
        case 6:printf("5 o|x 3]");break;
        case 7:printf("9 o|x 7 / 2]");break;
        case 8:printf("15 o|x 13 %9]");break;
        case 9:printf("3^2]");break;
        case 10:printf("8 o|x 5 - 5]");break;
        case 11:printf("51 % 20]");break;
        case 12:printf("7 o|x 4]");break;
        case 13:printf("10 o|x 9 + 2^2]");break;
        case 14:printf("9 o|x 2 % 23]");break;
        case 15:printf("8 o|x 6 / 4 * 5]");break;
        case 16:printf("2 * 5 + 5 o|x 3]");break;
        case 17:printf("4^2 + 2 o|x 1]");break;
        case 18:printf("11 o|x 2]");break;
        case 19:printf("5 o|x 6 - 11]");break;
        case 20:printf("9 o|x 5]");break;
        case 21:printf("11 o|x 7 - 7]");break;
        case 22:printf("13 o|x 11]");break;
        case 23:printf("5^2 - 3 o|x 2]");break;
        case 24:printf("10 o|x 4]");break;
        case 25:printf("32 o|x 4 + 5^2]");break;
        case 26:printf("15 o|x 13]");
    }
}
int main()
{ 
    while(true)
    {
        char s[101];
        scanf("%s",s);
        int n = strlen(s);
        for(int i = 0;i <= n - 1;i++)
        {
            fun(s[i]);
        }
        printf("\n");
    }
    return 0;
}

注意,此程序仅能加密无数个连续的小写字母串,所以请先将每个字写成拼音,再输入加密,但声调需要自己加。

Part 5:解密方法

例:[5 o|x 3 - 2][8 o|x 6 / 4 × 5][9 o|x 7 / 2][6 o|x 4 × 5 / 8]

①把[]里的式子按运算顺序算成数字。[4][15][7][5]

②将数字转化成字母。[d][o][g][e]

③去掉[],如果解密的不是汉语拼音,那么就完成了。(比如例子,原文是doge)但如果是,那么还要将声调加上,并按照小学一年级的汉语拼音法则看拼音写汉字拼出来,就能得到最终的意思啦~

好了,所有的内容到这里都结束了~如果本篇文章对你有帮助,请点一个赞,谢谢。对你来说那只是一个花费一秒点的赞,但对我来说至关重要。

看不见我看不见我:如果你用此加密法成功报了仇,请私信作者聊一聊哦