加密CryptoJS没有特殊字符

时间:2017-04-13 18:13:18

标签: node.js url base64

使用 nodejs  我正在尝试为用户生成一个唯一的网址符合电子邮件地址。通过该URL,用户可以通过解密密文并将密文数据与数据库进行比较验证电子邮件帐户。我正在使用 CryptoJS 来生成网址。

let url = 'http://localhost:4000/newUser/get/'+ciphertext ;

问题是在密文中,它包含正斜杠“/”,例如:

http://localhost:4000/newUser/get/U2FsdGVkX189ZNKKQrYgqU90DDwkl/W3hRTSGO1yvUMaDilPJmz9YYI3d1/E3i9C

路由器在上处理“/”,因此路由器正在搜索实际上是密文的目录。如果不包括“/”或密文中的特殊字符有任何解决方案,请提供帮助。 提前致谢。

3 个答案:

答案 0 :(得分:2)

您可以用以下任意文本轻松替换特殊字符:

ciphertext.toString().replace('+','xMl3Jk').replace('/','Por21Ld').replace('=','Ml32');

别忘了用特殊字符替换这些字符串

dataString.toString().replace('xMl3Jk', '+' ).replace('Por21Ld', '/').replace('Ml32', '=');

希望这将有助于解决您的问题

答案 1 :(得分:0)

但是,.replace()仅替换第一次出现的

更准确地说,您可以使用类似这样的内容:

// Original Text
var ciphertext = 'asda+dasd+asdas/asdasd/sadasdasd/dadasd=adsasda=dasd=';

// Replaced Text
var dataString = ciphertext.replace(/\+/g,'p1L2u3S').replace(/\//g,'s1L2a3S4h').replace(/=/g,'e1Q2u3A4l');
console.log(dataString);

// Back to Original Text
ciphertext = dataString.replace(/p1L2u3S/g, '+' ).replace(/s1L2a3S4h/g, '/').replace(/e1Q2u3A4l/g, '=');
console.log(ciphertext);

答案 2 :(得分:0)

恕我直言,@ JaiKumarRajput的回答,

他用以下字符编码字符串

CCSV *csv_open(char *filename) {    
    FILE* file = fopen(filename, "r");

    if (file == NULL)
        return NULL;

    CCSV *csv = malloc(sizeof(CCSV));

    csv->file = file;

    return csv;
}

现在,我不知道ciphertext.toString().replace('+','xMl3Jk').replace('/','Por21Ld').replace('=','Ml32'); xMl3JkPor21Ld的工作方式。因此,我也不知道它是否会以某种方式弄乱我的琴弦。
另外,因为我也必须在解码时执行此操作。所以,为什么我不使用这样的东西(已经存在的东西),

Ml32

我知道它仍然引入encodeURIComponent(ciphertext.toString('base64')) 字符。但是随着它在 URL 中的使用。其中是转义字符。

它比做会使我的代码混乱的事情有多重要?

注意:我使用了它,没有任何问题,这并不意味着我也没有发现任何问题。那感觉并不整洁。这只是我的拙见,所以,如果您不喜欢它?忽略它。