如何在Javascript中用DES算法加密字符串?
How can I encrypt string with DES algorithm in Javascript?
我有以下 shell 脚本,它使用 openssl 来加密字符串:
encrypt() {
STRING_TO_BE_ENCRYPTED=
DATE_STRING=
MD5=$(/bin/echo -n ${DATE_STRING} | openssl md5)
MD5=${MD5#*=\ }
key=${MD5:0:8}
iv=${MD5:24:8}
key=$(/bin/echo -n "${key}" |od -A n -t x1|sed s/\ //g)
iv=$(/bin/echo -n "${iv}" |od -A n -t x1|sed s/\ //g)
/bin/echo -n "${STRING_TO_BE_ENCRYPTED}" | openssl des -e -nosalt -K ${key} -iv ${iv} -a
}
我正在尝试在 javascript 中实现相同的功能(以便在邮递员中使用)。目前我有以下代码:
var DATE_STRING = "Tue, 6 Mar 2018 11:47:23 EET";
var STRING_TO_BE_ENCRYPTED = "somestring";
//MD5=$(/bin/echo -n ${DATE_STRING} | openssl md5)
//MD5=${MD5#*=\ }
var MD5 = CryptoJS.MD5(DATE_STRING).toString();
//key=${MD5:0:8}
var key=MD5.substring(0, 8);
//iv=${MD5:24:8}
var iv=MD5.substring(MD5.length - 8);
//key=$(/bin/echo -n "${key}" |od -A n -t x1|sed s/\ //g)
var keyHex = toHex(key);
//iv=$(/bin/echo -n "${iv}" |od -A n -t x1|sed s/\ //g)
var ivHex = toHex(iv);
And the only issue that I have is the last string from my shell script:
// /bin/echo -n "${STRING_TO_BE_ENCRYPTED}" | openssl des -e -nosalt -K ${key} -iv ${iv} -a
我完全坚持使用 "des" 进行加密。有人可以帮我将最后一个字符串转换为 javascript 吗?
好的,所以我对我的代码进行了更多的尝试,现在我有了可以工作的代码:
var DATE_STRING = "Tue, 6 Mar 2018 11:47:23 EET";
var str="somestring";
var MD5 = CryptoJS.MD5(DATE_STRING).toString();
var key=MD5.substring(0, 8);
var iv=MD5.substring(MD5.length - 8);
var keyHex = CryptoJS.enc.Utf8.parse(key);
var ivHex = CryptoJS.enc.Hex.parse(CryptoJS.enc.Utf8.parse(iv).toString(CryptoJS.enc.Hex));
var encrypted = CryptoJS.DES.encrypt(str, keyHex, { iv: ivHex, mode: CryptoJS.mode.CBC });
var result = encrypted.toString();
因此这段代码产生的结果与我使用 openssl
的 shell 脚本产生的结果相同
我有以下 shell 脚本,它使用 openssl 来加密字符串:
encrypt() {
STRING_TO_BE_ENCRYPTED=
DATE_STRING=
MD5=$(/bin/echo -n ${DATE_STRING} | openssl md5)
MD5=${MD5#*=\ }
key=${MD5:0:8}
iv=${MD5:24:8}
key=$(/bin/echo -n "${key}" |od -A n -t x1|sed s/\ //g)
iv=$(/bin/echo -n "${iv}" |od -A n -t x1|sed s/\ //g)
/bin/echo -n "${STRING_TO_BE_ENCRYPTED}" | openssl des -e -nosalt -K ${key} -iv ${iv} -a
}
我正在尝试在 javascript 中实现相同的功能(以便在邮递员中使用)。目前我有以下代码:
var DATE_STRING = "Tue, 6 Mar 2018 11:47:23 EET";
var STRING_TO_BE_ENCRYPTED = "somestring";
//MD5=$(/bin/echo -n ${DATE_STRING} | openssl md5)
//MD5=${MD5#*=\ }
var MD5 = CryptoJS.MD5(DATE_STRING).toString();
//key=${MD5:0:8}
var key=MD5.substring(0, 8);
//iv=${MD5:24:8}
var iv=MD5.substring(MD5.length - 8);
//key=$(/bin/echo -n "${key}" |od -A n -t x1|sed s/\ //g)
var keyHex = toHex(key);
//iv=$(/bin/echo -n "${iv}" |od -A n -t x1|sed s/\ //g)
var ivHex = toHex(iv);
And the only issue that I have is the last string from my shell script:
// /bin/echo -n "${STRING_TO_BE_ENCRYPTED}" | openssl des -e -nosalt -K ${key} -iv ${iv} -a
我完全坚持使用 "des" 进行加密。有人可以帮我将最后一个字符串转换为 javascript 吗?
好的,所以我对我的代码进行了更多的尝试,现在我有了可以工作的代码:
var DATE_STRING = "Tue, 6 Mar 2018 11:47:23 EET";
var str="somestring";
var MD5 = CryptoJS.MD5(DATE_STRING).toString();
var key=MD5.substring(0, 8);
var iv=MD5.substring(MD5.length - 8);
var keyHex = CryptoJS.enc.Utf8.parse(key);
var ivHex = CryptoJS.enc.Hex.parse(CryptoJS.enc.Utf8.parse(iv).toString(CryptoJS.enc.Hex));
var encrypted = CryptoJS.DES.encrypt(str, keyHex, { iv: ivHex, mode: CryptoJS.mode.CBC });
var result = encrypted.toString();
因此这段代码产生的结果与我使用 openssl
的 shell 脚本产生的结果相同