在不使用任何外部库的情况下使用简单的 Javascript 加密和解密字符串
Encrypt and decrypt a string using simple Javascript without using any external library
我想创建一个函数来加密一个字符串,它将把字符串缩短为字母数字字符,并创建一个函数 decrypt 来取回加密的字符串。
下面是我参考网上编码的。
function compress(string) {
string = unescape(encodeURIComponent(string));
var newString = '',
char, nextChar, combinedCharCode;
for (var i = 0; i < string.length; i += 2) {
char = string.charCodeAt(i);
if ((i + 1) < string.length) {
nextChar = string.charCodeAt(i + 1) - 31;
combinedCharCode = char + "" + nextChar.toLocaleString('en', {
minimumIntegerDigits: 2
});
newString += String.fromCharCode(parseInt(combinedCharCode, 10));
} else {
newString += string.charAt(i);
}
}
return newString;
}
function decompress(string) {
var newString = '',
char, codeStr, firstCharCode, lastCharCode;
for (var i = 0; i < string.length; i++) {
char = string.charCodeAt(i);
if (char > 132) {
codeStr = char.toString(10);
firstCharCode = parseInt(codeStr.substring(0, codeStr.length - 2), 10);
lastCharCode = parseInt(codeStr.substring(codeStr.length - 2, codeStr.length), 10) + 31;
newString += String.fromCharCode(firstCharCode) + String.fromCharCode(lastCharCode);
} else {
newString += string.charAt(i);
}
}
return newString;
}
var stringToCompress = 'awesome';
var compressedString = compress(stringToCompress);
var decompressedString = decompress(compressedString);
console.log("encrypted :",compressedString);
console.log("decrypted :",decompressedString);
目前 sting="awesome" 的输出是
encrypted: ☼⟈⮪e
decrypted: awesome
我想要类似的加密,但必须只使用字母数字值而不是符号。
我不知道你的目标是什么(它是使字符串更短,但二进制或加密并在 ascii 范围内),所以如果是后者,那么你可以使用 base64
编码:
function compress(string) {
string = unescape(encodeURIComponent(string));
var newString = '',
char, nextChar, combinedCharCode;
for (var i = 0; i < string.length; i += 2) {
char = string.charCodeAt(i);
if ((i + 1) < string.length) {
nextChar = string.charCodeAt(i + 1) - 31;
combinedCharCode = char + "" + nextChar.toLocaleString('en', {
minimumIntegerDigits: 2
});
newString += String.fromCharCode(parseInt(combinedCharCode, 10));
} else {
newString += string.charAt(i);
}
}
return btoa(unescape(encodeURIComponent(newString)));
}
function decompress(string) {
var newString = '',
char, codeStr, firstCharCode, lastCharCode;
string = decodeURIComponent(escape(atob(string)));
for (var i = 0; i < string.length; i++) {
char = string.charCodeAt(i);
if (char > 132) {
codeStr = char.toString(10);
firstCharCode = parseInt(codeStr.substring(0, codeStr.length - 2), 10);
lastCharCode = parseInt(codeStr.substring(codeStr.length - 2, codeStr.length), 10) + 31;
newString += String.fromCharCode(firstCharCode) + String.fromCharCode(lastCharCode);
} else {
newString += string.charAt(i);
}
}
return newString;
}
var stringToCompress = 'awesome';
var compressedString = compress(stringToCompress);
var decompressedString = decompress(compressedString);
console.log("encrypted :",compressedString);
console.log("decrypted :",decompressedString);
或者如果你真的想要字母数字,那么你可以简单地将它转换成十六进制:
function compress(string) {
string = unescape(encodeURIComponent(string));
var newString = '',
char, nextChar, combinedCharCode;
for (var i = 0; i < string.length; i += 2) {
char = string.charCodeAt(i);
if ((i + 1) < string.length) {
nextChar = string.charCodeAt(i + 1) - 31;
combinedCharCode = char + "" + nextChar.toLocaleString('en', {
minimumIntegerDigits: 2
});
newString += String.fromCharCode(parseInt(combinedCharCode, 10));
} else {
newString += string.charAt(i);
}
}
return newString.split("").reduce((hex,c)=>hex+=c.charCodeAt(0).toString(16).padStart(4,"0"),"");
}
function decompress(string) {
var newString = '',
char, codeStr, firstCharCode, lastCharCode;
string = string.match(/.{1,4}/g).reduce((acc,char)=>acc+String.fromCharCode(parseInt(char, 16)),"");
for (var i = 0; i < string.length; i++) {
char = string.charCodeAt(i);
if (char > 132) {
codeStr = char.toString(10);
firstCharCode = parseInt(codeStr.substring(0, codeStr.length - 2), 10);
lastCharCode = parseInt(codeStr.substring(codeStr.length - 2, codeStr.length), 10) + 31;
newString += String.fromCharCode(firstCharCode) + String.fromCharCode(lastCharCode);
} else {
newString += string.charAt(i);
}
}
return newString;
}
var stringToCompress = 'awesome';
var compressedString = compress(stringToCompress);
var decompressedString = decompress(compressedString);
console.log("encrypted :",compressedString);
console.log("decrypted :",decompressedString);
我想创建一个函数来加密一个字符串,它将把字符串缩短为字母数字字符,并创建一个函数 decrypt 来取回加密的字符串。
下面是我参考网上编码的。
function compress(string) {
string = unescape(encodeURIComponent(string));
var newString = '',
char, nextChar, combinedCharCode;
for (var i = 0; i < string.length; i += 2) {
char = string.charCodeAt(i);
if ((i + 1) < string.length) {
nextChar = string.charCodeAt(i + 1) - 31;
combinedCharCode = char + "" + nextChar.toLocaleString('en', {
minimumIntegerDigits: 2
});
newString += String.fromCharCode(parseInt(combinedCharCode, 10));
} else {
newString += string.charAt(i);
}
}
return newString;
}
function decompress(string) {
var newString = '',
char, codeStr, firstCharCode, lastCharCode;
for (var i = 0; i < string.length; i++) {
char = string.charCodeAt(i);
if (char > 132) {
codeStr = char.toString(10);
firstCharCode = parseInt(codeStr.substring(0, codeStr.length - 2), 10);
lastCharCode = parseInt(codeStr.substring(codeStr.length - 2, codeStr.length), 10) + 31;
newString += String.fromCharCode(firstCharCode) + String.fromCharCode(lastCharCode);
} else {
newString += string.charAt(i);
}
}
return newString;
}
var stringToCompress = 'awesome';
var compressedString = compress(stringToCompress);
var decompressedString = decompress(compressedString);
console.log("encrypted :",compressedString);
console.log("decrypted :",decompressedString);
目前 sting="awesome" 的输出是
encrypted: ☼⟈⮪e
decrypted: awesome
我想要类似的加密,但必须只使用字母数字值而不是符号。
我不知道你的目标是什么(它是使字符串更短,但二进制或加密并在 ascii 范围内),所以如果是后者,那么你可以使用 base64
编码:
function compress(string) {
string = unescape(encodeURIComponent(string));
var newString = '',
char, nextChar, combinedCharCode;
for (var i = 0; i < string.length; i += 2) {
char = string.charCodeAt(i);
if ((i + 1) < string.length) {
nextChar = string.charCodeAt(i + 1) - 31;
combinedCharCode = char + "" + nextChar.toLocaleString('en', {
minimumIntegerDigits: 2
});
newString += String.fromCharCode(parseInt(combinedCharCode, 10));
} else {
newString += string.charAt(i);
}
}
return btoa(unescape(encodeURIComponent(newString)));
}
function decompress(string) {
var newString = '',
char, codeStr, firstCharCode, lastCharCode;
string = decodeURIComponent(escape(atob(string)));
for (var i = 0; i < string.length; i++) {
char = string.charCodeAt(i);
if (char > 132) {
codeStr = char.toString(10);
firstCharCode = parseInt(codeStr.substring(0, codeStr.length - 2), 10);
lastCharCode = parseInt(codeStr.substring(codeStr.length - 2, codeStr.length), 10) + 31;
newString += String.fromCharCode(firstCharCode) + String.fromCharCode(lastCharCode);
} else {
newString += string.charAt(i);
}
}
return newString;
}
var stringToCompress = 'awesome';
var compressedString = compress(stringToCompress);
var decompressedString = decompress(compressedString);
console.log("encrypted :",compressedString);
console.log("decrypted :",decompressedString);
或者如果你真的想要字母数字,那么你可以简单地将它转换成十六进制:
function compress(string) {
string = unescape(encodeURIComponent(string));
var newString = '',
char, nextChar, combinedCharCode;
for (var i = 0; i < string.length; i += 2) {
char = string.charCodeAt(i);
if ((i + 1) < string.length) {
nextChar = string.charCodeAt(i + 1) - 31;
combinedCharCode = char + "" + nextChar.toLocaleString('en', {
minimumIntegerDigits: 2
});
newString += String.fromCharCode(parseInt(combinedCharCode, 10));
} else {
newString += string.charAt(i);
}
}
return newString.split("").reduce((hex,c)=>hex+=c.charCodeAt(0).toString(16).padStart(4,"0"),"");
}
function decompress(string) {
var newString = '',
char, codeStr, firstCharCode, lastCharCode;
string = string.match(/.{1,4}/g).reduce((acc,char)=>acc+String.fromCharCode(parseInt(char, 16)),"");
for (var i = 0; i < string.length; i++) {
char = string.charCodeAt(i);
if (char > 132) {
codeStr = char.toString(10);
firstCharCode = parseInt(codeStr.substring(0, codeStr.length - 2), 10);
lastCharCode = parseInt(codeStr.substring(codeStr.length - 2, codeStr.length), 10) + 31;
newString += String.fromCharCode(firstCharCode) + String.fromCharCode(lastCharCode);
} else {
newString += string.charAt(i);
}
}
return newString;
}
var stringToCompress = 'awesome';
var compressedString = compress(stringToCompress);
var decompressedString = decompress(compressedString);
console.log("encrypted :",compressedString);
console.log("decrypted :",decompressedString);