使用 AND 和 OR 运算符实现的加密程序该如何解密? - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
ENIAC

使用 AND 和 OR 运算符实现的加密程序该如何解密?

  •  
  •   ENIAC Sep 5, 2023 2056 views
    This topic created in 980 days ago, the information mentioned may be changed or developed.

    AND 和 OR 运算是不是没有逆运算呀?那下面这种程序要如何写一个 decode 算法呢?是不是解密有另外的一个码表?有没有吊大的可以给一下解题思路?

    const codeTable = 'a=9-vBc3C0iDWJE4gFumGYsHoyIe7KxVLkXM6ZNqbOtdPwfQzh12jR5lS8nT_pUAr' const encode = json => { let result = '' for (let i = 0; i < json.length;) { const a = json.charCodeAt(i++) const b = json.charCodeAt(i++) const c = json.charCodeAt(i++) const d = a >> 2 const e = (( & a) << 4) | (b >> 4) let f = ((b & 15) << 2) | (c >> 6) let g = c & 63 isNaN(b) ? f = g = 64 : isNaN(c) && (g = 64) result = result + codeTable[d] + codeTable[e] + codeTable[f] + codeTable[g] } return result } const decode = cipher => { } 
    12 replies    2023-09-06 14:43:09 +08:00
    pagxir
        1
    pagxir  
       Sep 5, 2023
    这不就是 base64 编码么,只是把码表换而已。
    gwy15
        2
    gwy15  
       Sep 5, 2023
    这就是一个自定义了映射的 base64 编码
    momocraft
        3
    momocraft  
       Sep 5, 2023
    假定可以解密而且代码是对的,因为我不知道这里用 charCodeAt 是不是对
    注意到每次循环把 json 的 3 字符编码成 result4 个字符
    所以把 \x00\x00\x00 ~ \xff\xff\xff 跑一遍就得到码表了
    NoOneNoBody
        4
    NoOneNoBody  
       Sep 5, 2023
    首先,有个词叫“位运算”,如果不懂这个,那不知道 base64 的实现原理也就正常了
    位运算虽然在高级语言使用场合不多,但它是编程的基础之一,也是各种逻辑算式在二进制整数的体现(原理),不懂的话建议补充学习一下
    laozhoubuluo
        5
    laozhoubuluo  
       Sep 6, 2023   1
    找 ChatGPT 写了个解密函数,测试是通过的。

    ```
    const decode = cipher => {
    let result = ''
    for (let i = 0; i < cipher.length;) {
    const d = codeTable.indexOf(cipher[i++])
    const e = codeTable.indexOf(cipher[i++])
    const f = codeTable.indexOf(cipher[i++])
    const g = codeTable.indexOf(cipher[i++])
    const a = (d << 2) | (e >> 4)
    const b = ((e & 15) << 4) | (f >> 2)
    const c = ((f & 3) << 6) | g
    result += String.fromCharCode(a)
    if (f !== 64) {
    result += String.fromCharCode(b)
    }
    if (g !== 64) {
    result += String.fromCharCode(c)
    }
    }
    return result
    }
    ```
    ENIAC
        6
    ENIAC  
    OP
       Sep 6, 2023
    原来如此,没有想到 base64 那里去,乍一看还是挺相似的,感谢感谢!
    ENIAC
        7
    ENIAC  
    OP
       Sep 6, 2023
    @laozhoubuluo 有用过 chatgpt 写,但是我拿着密文解出来之后部分字符是乱码的
    laozhoubuluo
        8
    laozhoubuluo  
       Sep 6, 2023
    @ENIAC 仔细测试了一下发现了个问题,encode 似乎并不能处理中文。

    例如:
    ```
    const json = '{"Username":"测试","UID":20}';
    const encoded = encode(json);
    console.log("编码内容:", encoded);
    ```

    返回结果是(空格是我添加以便区分的):
    编码内容: x10Y75Y1eNBwyuCnC undefined undefined YCXzXYGZvCMb1W3jr

    那这样的话如果输入内容包含中文,那么势必会出现乱码的情况的。
    hyperbin
        9
    hyperbin  
       Sep 6, 2023 via Android
    除非你是密码学专业,否则永远不要使用自己写的加密
    sherlockwhite
        10
    sherlockwhite  
       Sep 6, 2023
    ```
    const decode = cipher => {
    let result = ''
    for(let i = 0; i < cipher.length; i+=4) {
    const a = codeTable.indexOf(cipher[i])
    const b = codeTable.indexOf(cipher[i+1])
    const c = codeTable.indexOf(cipher[i+2])
    const d = codeTable.indexOf(cipher[i+3])

    const n1 = a << 2 | b >> 4
    const n2 = (b & 15) << 4 | c >> 2
    const n3 = (c & 3) << 6 | d
    result += String.fromCharCode(n1)
    if(c != 64) {
    result += String.fromCharCode(n2)
    }
    if(d != 64) {
    result += String.fromCharCode(n3)
    }
    }
    return result
    }
    ```
    zbinlin
        11
    zbinlin  
       Sep 6, 2023
    @laozhoubuluo 这肯定要先转成 utf8 字节再 encode 才行
    mcfog
        12
    mcfog  
       Sep 6, 2023
    b64Table='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
    decode = s=>atob(Array.from(s).map(c=>b64Table[codeTable.indexOf(c)]).join(''))
    console.log(decode(encode('Hello World!')))

    没啥毛病,中文是因为整个过程用 charcode 当取字节用了,但实际上 charcode 取的是 unicode codepoint
    About     Help     Advertise     Blog     API     FAQ     Solana     3138 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 71ms UTC 14:59 PVG 22:59 LAX 07:59 JFK 10:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86