代码之家  ›  专栏  ›  技术社区  ›  T Mack

简单的javascript加密,对url查询是安全的

  •  0
  • T Mack  · 技术社区  · 6 年前

    我想编写一个简单的加密函数,它将加密输入文本并生成一个可解密的输出,该输出也可以安全地作为参数通过url查询进行传输。

    This site 提供了一个很好的起点,但是,有些输出包含“=”和“?”当在查询中作为参数发送时,这不会起到很好的作用。代码复制如下:

    var jsEncode = {
      encode: function(s, k) {
        var enc = "";
        var str = "";
        // make sure that input is string
        str = s.toString();
        for (var i = 0; i < s.length; i++) {
          // create block
          var a = s.charCodeAt(i);
          // bitwise XOR
          var b = a ^ k;
          enc = enc + String.fromCharCode(b);
        }
        return enc;
      }
    };
    
    
    var code = '1';
    var e = jsEncode.encode("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789@,.-", code);
    console.log(e);
    var d = jsEncode.encode(e, code);
    console.log(d);

    我不能使用任何外部库,只能使用vanilla js。

    输入只有电子邮件,因此这些是我唯一需要担心的字符:

    abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789@,.-
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Kapsonfire    6 年前

    encodeuricomponent()应该是您想要的函数

    更多信息请参见: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

    // encodes characters such as ?,=,/,&,:
    console.log(encodeURIComponent('?x=шеллы'));
    // expected output: "%3Fx%3D%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"
    console.log(encodeURIComponent('?x=test'));
    // expected output: "%3Fx%3Dtest"