哥哥,不会写文档就 tm 别写,老老实实写代码行吗?

我对于各种厂商提供的对接文档提过很多次,说大家的文档写的不好。直到昨天看了友商给的文档,跟研发的小姐姐调代码调到半夜十二点,才发现还是高估了这些人的水平。

文档内容不够详细,我忍了。实例代码不全,我也忍了。测试设备对于错误二维码没有反馈,我也忍了。你们 tmd 给的加密算法都是错的让我怎么忍?

咱们来还原下事情经过,昨天有个设备着急上线,根据之前厂商给的对接文档已经对接玩了,就剩下现场测试。等我带人带设备去测试的时候发现对应的项目没有给密钥。在群里问他们要密钥,结果直接扔了个文档过来,告知,他们的算法升级了!

艹,你他妈的说升级就升级,升级这么久了连个 p 都不放。我们要上线了,你跟我说升级了?我可去你妈的!

升级就升级吧,我忍了,看了下文档并不复杂。写后端的小姐姐对于加密这一块不是很熟练,于是作为一个全栈程序媛,只好带着小姐姐写二维码字符串的生成算法。

虽然不是很专业,但是拿到文档之后一个多小时也基本把算法集成完了。

又屁颠屁颠的跑到项目上测试,结果能改的参数配置都改了,设备就是不识别。在群里咨询,沙雕们也是爱答不理的,给他们老板打了个电话,让他们配合下,也没什么卵用,真 tm 垃圾。这尼玛就离谱了啊,在现场折腾了两个小时无果之后。准备回公司再研究一下,走之前给项目经理打了个电话,告知二维码不好使,他说他有能用的二维码。然后给我发了一个。

唉,你别说,还真 tm 是好使的。

既然有了能用的二维码,那么就可以对比下看看到底是哪里的问题了。

想着算法既然基本都是异或加密,那么两次异或之后就得到原来的字符串了,直接把二维码加密后的字符串扔进去,果然拿到了明文信息。对比了一下给的各种参数没有发现错误。

但是自己想要把字符串加密回去却怎么也做不到,数组开始第一个加密之后就是错的。为了对比是哪里的问题,连计算器都用上了,算到底是不是自己简单的数值运算都有问题。尝试多次之后怎么也得不到他们二维码上的字符串,让我一度怀疑数学不存在了。同样的东西加密之后竟然结果不一样,但是竟然还能解密回去,怎么有这种事情?

当然,这个世界上在计算机领域出现玄学事件的概率不大,尤其是多次出现。开发小姐姐给拿了个本子说,你画一下加密和解密流程。是不是哪里取得数值不对?

拿到本子之后,简单的画了一下,理清楚了:这个解密过程,除了第 25 个,其他的都是直接用原来的 25 个数值参与了异或运算。第二十五个直接跟 0xaa 异或了。

那么要加密数据,应该先对地 25 个进行异或,然后对其他的数据在进行处理(这个在解密字符串的时候就该想到了,不过折腾了一晚上脑子有点迷糊了),到这里基本就理清楚逻辑了。也就是说,他们文档里给的加密代码实际是设备上的解密代码,而加密代码根本就 tm 的没给!!!

这真是高级啊,第一次见文档还能这么写的。真是小刀拉屁股了。如果没有项目经理给的那个二维码,就用他们这个加密算法去生成控制二维码,哪怕宇宙爆炸了也算不对!

艹,会写文档就好好写,不会写就 tm 别瞎写好吗?真 tm 傻吊!艹!让自己白白多浪费了四五个小时!

15:50后续,哼唧唧,不开心呢。跟老板反馈了人家也不承认啊,说代码没问题。哦吼,这就很棒呢,就喜欢嘴硬的。

哎,多年不写 C 语言的代码了,这逼着我又跑了一遍 C 语言的代码:

/******************************************************************************

                            Online C Compiler.
                Code, Compile, Run and Debug C program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <stdio.h>

void encryptData(int *encryptBuff,int *sourceBuff) { 
    int i; 
    for(i = 0;i<28; i++) { 
        if(i == 24) { 
           *(encryptBuff + 24) = *(sourceBuff + 24) ^ 0xbb; 
        } else { 
           *(encryptBuff + i) = *(sourceBuff+ i) ^ *(sourceBuff + 24) ^ 0x44 ^ i ^ 0Xbb; 
        } 
    } 
}
int main()
{
    int source[28] ={0XAA,0xbb,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x55,0x55,0x55,0x55,
    0xab,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e};
    int enc[28];
    encryptData(enc,source);
    int i;
    printf("原始数组 = ");
    for (i = 0; i<28; i++)
        printf("%x ", source[i]);
    
    printf("\r\n第一次加密 = ");
    for (i = 0; i<28; i++)
        printf("%x ", enc[i]);
        
    int reenc[28];
    encryptData(reenc,enc);
    printf("\r\n第二次加密 = ");
    for (i = 0; i<28; i++)
        printf("%x ", reenc[i]);
        
    return 0;
}

为什么要酱紫呢?‍ 上面代码没有本地编译器可以通过这个地址在线运行:https://www.onlinegdb.com/online_c_compiler

以我浅薄的计算机常识理解,加密循环 100 次也还原不了。谁要是能实现了,姐姐我奖励 100 快钱~~

☆版权☆

* 网站名称:obaby@mars
* 网址:https://h4ck.org.cn/
* 个性:https://oba.by/
* 本文标题: 《哥哥,不会写文档就 tm 别写,老老实实写代码行吗?》
* 本文链接:https://h4ck.org.cn/2024/03/16050
* 短链接:https://oba.by/?p=16050
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


You may also like

70 comments

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注