我想用javascript进行自定义加密,但我坚持使用解密功能

问题描述 投票:1回答:3

我想用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>
javascript html html5
3个回答
1
投票

你正在循环通过奇异的字符并将它们传递给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;
}

0
投票

您可以使用三个字符来解密加密的字符串。

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>

0
投票

看起来你正在迭代文本以逐字符解密,但是你的dec函数需要三个字符。这永远不会发生,所以dec()返回undefined。

例:

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

您应该更改解密功能以避免这种情况。另外,一些指针:

  • 您没有在加密/解密函数中初始化i
  • 在您的案例陈述中,在break;之后不需要return,因为返回将结束执行。

编辑:这是一个地图的例子,因为其他一些答案有一些带有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>
© www.soinside.com 2019 - 2024. All rights reserved.