使用javascript进行自定义加密(卡在解密功能中)



我想用javascript制作新的自定义加密引擎,但是当我制作解密函数时遇到了问题。在我的解密功能中,我不明白如何将 3 个字符切换到 1 个字符。在解密功能部分,我不想要的情况中的 3 个字符正在更改为返回的字符。

如果您需要我的完整代码,我可以在这里分享。

所以请帮我解决这个问题。对不起,我的英语:)不好

<body>
	<h3>Encrypt and Decrypt</h3>
	<!-- Encrypt -->
<!-- 	<input placeholder="Ketikan sesuatu disini, pasti bisa:v" id="input"><br>
	<button onclick="encrypt()">Encrypt</button> -->
	<!-- Decrypt -->
	<br><input placeholder="Ketikan sesuatu disini, pasti bisa:v" id="input2"><br>
	<button onclick="decrypt()">Decrypt</button>
	<!-- Result -->
	<div id="result"></div>
	<!-- Enginenya -->
	<script>
		function encrypt(){
			var rawtext = document.getElementById("input").value;
			var temptext = "";
			for(i = 0; i < rawtext.length; i++){
				temptext += enc(rawtext[i]);
			}
			document.getElementById("result").innerHTML = temptext;
		}
		function decrypt(){
			var rawtext = document.getElementById("input2").value;
			var temptext = "";
			for(i = 0; i < rawtext.length; i++){
				temptext += dec(rawtext[i]);
			}
			document.getElementById("result").innerHTML = temptext;
		}
		function enc(x){
			switch(x){
				case " " :
				return " ";
				break;
				case "A" :
				return "+/=";
				break;
				case "B" :
				return "36=";
				break;
			}
		}
		function dec(x){
			switch(x){
				case "+/=" :
				return "A";
				break;
				case "36=" :
				return "B";
				break;
			}
		}
	</script>
</body>

您正在循环单数字符并将它们传递给dec(),例如。如果您输入"+/=",您实际上是在调用dec('+')然后dec('/')然后dec('=')

解密输入的值时,您必须将它们分成 3 组,然后传递这些值。

function decrypt(){
var rawtext = document.getElementById("input2").value;
var temptext = "";
for(i = 0, charsLength = rawtext.length; i < charsLength; i += 3){
temptext += dec(rawtext.substring(i, i + 3));
}
document.getElementById("result").innerHTML = temptext;
}

你可以用三个卡勒来解密一个加密的字符串。

while (i < rawtext.length) {
temptext += dec(rawtext.slice(i, i += 3)); // take from index i and increment i by 3
}

function encrypt() {
var rawtext = document.getElementById("input").value,
temptext = "",
i;
for (i = 0; i < rawtext.length; i++) {
temptext += enc(rawtext[i]);
}
document.getElementById("result").innerHTML = temptext;
}
function decrypt() {
var rawtext = document.getElementById("input2").value,
temptext = "",
i = 0;
while (i < rawtext.length) {
temptext += dec(rawtext.slice(i, i += 3));
}
document.getElementById("result").innerHTML = temptext;
}
function enc(x) {
switch (x) {
case " ":
return " ";
case "A":
return "+/=";
case "B":
return "36=";
}
}
function dec(x) {
switch (x) {
case "+/=":
return "A";
case "36=":
return "B";
}
}
<h3>Encrypt and Decrypt</h3>
<input placeholder="Ketikan sesuatu disini, pasti bisa:v" id="input"><br>
<button onclick="encrypt()">Encrypt</button>
<!-- Decrypt -->
<br><input placeholder="Ketikan sesuatu disini, pasti bisa:v" id="input2"><br>
<button onclick="decrypt()">Decrypt</button>
<!-- Result -->
<div id="result"></div>

看起来您正在迭代文本以逐个字符解密,但随后您的dec函数需要三个字符。这永远不会发生,因此dec()返回未定义。

例:

decrypt("36=") -> 
dec("3") + dec("6") + dec("=") ->
undefined + undefined + undefined
undefinedundefinedundefined

您应该更改解密功能以避免这种情况。此外,一些提示:

  • 您不会在加密/解密函数中初始化i
  • case 语句中return后不需要break;,因为 return 将结束执行。

编辑:这是一个带有map的示例,因为其他一些答案有一些带有for循环。也因为我怀疑它可以用一行完成(我是对的!

<body>
	<h3>Encrypt and Decrypt</h3>
	<br><input placeholder="Ketikan sesuatu disini, pasti bisa:v" id="input2"><br>
	<button onclick="decrypt()">Decrypt</button>
	<div id="result"></div>
	<script>
		function decrypt(){
			document.getElementById("result").innerHTML = document.getElementById("input2").value.match(/.{1,3}/g).map(dec).join('');
		}
		function dec(x){
			switch(x){
				case "+/=" :
				  return "A";
				case "36=" :
				  return "B";
default:
return "?";
			}
		}
	</script>
</body>

最新更新