feat: Key finder improvement (#1456)

* Improve algorithm

* Updated Documentation in README.md

* Updated Documentation in README.md

* Remove unwanted changes

* Make the changes fit

* Updated Documentation in README.md

---------

Co-authored-by: IcarusTheFly <IcarusTheFly@users.noreply.github.com>
Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
This commit is contained in:
Omar Ferreiro
2023-10-10 08:59:51 +02:00
committed by GitHub
parent f8ffacd481
commit d7dc85232c
2 changed files with 81 additions and 74 deletions

View File

@ -1,7 +1,8 @@
/****************************************************** /**
Find and retrieve the encryption key automatically * Find and retrieve the encryption key automatically.
Note: This is a draft version, please help to modify, Thanks! * @param {string} str - The input encrypted string.
******************************************************/ * @returns {number} - The encryption key found, or 0 if not found.
*/
function keyFinder(str) { function keyFinder(str) {
// str is used to get the input of encrypted string // str is used to get the input of encrypted string
const wordBank = [ const wordBank = [
@ -30,8 +31,6 @@ function keyFinder(str) {
' be ', ' be ',
'Be ' 'Be '
] ]
// let wordbankelementCounter = 0;
// let key = 0; // return zero means the key can not be found
const inStr = str.toString() // convert the input to String const inStr = str.toString() // convert the input to String
let outStr = '' // store the output value let outStr = '' // store the output value
let outStrElement = '' // temporary store the word inside the outStr, it is used for comparison let outStrElement = '' // temporary store the word inside the outStr, it is used for comparison
@ -59,89 +58,95 @@ function keyFinder(str) {
return 0 // return 0 if found nothing return 0 // return 0 if found nothing
} }
/* this sub-function is used to assist the keyFinder to find the key */ /**
* This sub-function is used to assist the keyFinder in finding the key.
* @param {string} inStr - The input string.
* @param {number} numShifted - The number of characters to shift in the Caesar cipher.
* @returns {string} - The decrypted string.
*/
function caesarCipherEncodeAndDecodeEngine(inStr, numShifted) { function caesarCipherEncodeAndDecodeEngine(inStr, numShifted) {
const shiftNum = numShifted const shiftNum = numShifted
let charCode = 0 let charCode = 0
let outStr = ''
let shiftedCharCode = 0 let shiftedCharCode = 0
let result = 0 let result = 0
for (let i = 0; i < inStr.length; i++) { return inStr
charCode = inStr[i].charCodeAt() .split('')
shiftedCharCode = charCode + shiftNum .map((char) => {
result = charCode charCode = char.charCodeAt()
shiftedCharCode = charCode + shiftNum
result = charCode
if (charCode >= 48 && charCode <= 57) { if (charCode >= 48 && charCode <= 57) {
if (shiftedCharCode < 48) { if (shiftedCharCode < 48) {
let diff = Math.abs(48 - 1 - shiftedCharCode) % 10 let diff = Math.abs(48 - 1 - shiftedCharCode) % 10
while (diff >= 10) { while (diff >= 10) {
diff = diff % 10 diff = diff % 10
}
document.getElementById('diffID').innerHTML = diff
shiftedCharCode = 57 - diff
result = shiftedCharCode
} else if (shiftedCharCode >= 48 && shiftedCharCode <= 57) {
result = shiftedCharCode
} else if (shiftedCharCode > 57) {
let diff = Math.abs(57 + 1 - shiftedCharCode) % 10
while (diff >= 10) {
diff = diff % 10
}
document.getElementById('diffID').innerHTML = diff
shiftedCharCode = 48 + diff
result = shiftedCharCode
} }
document.getElementById('diffID').innerHTML = diff } else if (charCode >= 65 && charCode <= 90) {
if (shiftedCharCode <= 64) {
let diff = Math.abs(65 - 1 - shiftedCharCode) % 26
shiftedCharCode = 57 - diff while (diff % 26 >= 26) {
diff = diff % 26
}
shiftedCharCode = 90 - diff
result = shiftedCharCode
} else if (shiftedCharCode >= 65 && shiftedCharCode <= 90) {
result = shiftedCharCode
} else if (shiftedCharCode > 90) {
let diff = Math.abs(shiftedCharCode - 1 - 90) % 26
result = shiftedCharCode while (diff % 26 >= 26) {
} else if (shiftedCharCode >= 48 && shiftedCharCode <= 57) { diff = diff % 26
result = shiftedCharCode }
} else if (shiftedCharCode > 57) { shiftedCharCode = 65 + diff
let diff = Math.abs(57 + 1 - shiftedCharCode) % 10 result = shiftedCharCode
while (diff >= 10) {
diff = diff % 10
} }
document.getElementById('diffID').innerHTML = diff } else if (charCode >= 97 && charCode <= 122) {
if (shiftedCharCode <= 96) {
let diff = Math.abs(97 - 1 - shiftedCharCode) % 26
shiftedCharCode = 48 + diff while (diff % 26 >= 26) {
diff = diff % 26
}
shiftedCharCode = 122 - diff
result = shiftedCharCode
} else if (shiftedCharCode >= 97 && shiftedCharCode <= 122) {
result = shiftedCharCode
} else if (shiftedCharCode > 122) {
let diff = Math.abs(shiftedCharCode - 1 - 122) % 26
result = shiftedCharCode while (diff % 26 >= 26) {
diff = diff % 26
}
shiftedCharCode = 97 + diff
result = shiftedCharCode
}
} }
} else if (charCode >= 65 && charCode <= 90) { return String.fromCharCode(parseInt(result))
if (shiftedCharCode <= 64) { })
let diff = Math.abs(65 - 1 - shiftedCharCode) % 26 .join('')
while (diff % 26 >= 26) {
diff = diff % 26
}
shiftedCharCode = 90 - diff
result = shiftedCharCode
} else if (shiftedCharCode >= 65 && shiftedCharCode <= 90) {
result = shiftedCharCode
} else if (shiftedCharCode > 90) {
let diff = Math.abs(shiftedCharCode - 1 - 90) % 26
while (diff % 26 >= 26) {
diff = diff % 26
}
shiftedCharCode = 65 + diff
result = shiftedCharCode
}
} else if (charCode >= 97 && charCode <= 122) {
if (shiftedCharCode <= 96) {
let diff = Math.abs(97 - 1 - shiftedCharCode) % 26
while (diff % 26 >= 26) {
diff = diff % 26
}
shiftedCharCode = 122 - diff
result = shiftedCharCode
} else if (shiftedCharCode >= 97 && shiftedCharCode <= 122) {
result = shiftedCharCode
} else if (shiftedCharCode > 122) {
let diff = Math.abs(shiftedCharCode - 1 - 122) % 26
while (diff % 26 >= 26) {
diff = diff % 26
}
shiftedCharCode = 97 + diff
result = shiftedCharCode
}
}
outStr = outStr + String.fromCharCode(parseInt(result))
}
return outStr
} }
export { keyFinder } export { keyFinder }

View File

@ -179,6 +179,7 @@
* [DecimalExpansion](Maths/DecimalExpansion.js) * [DecimalExpansion](Maths/DecimalExpansion.js)
* [DecimalIsolate](Maths/DecimalIsolate.js) * [DecimalIsolate](Maths/DecimalIsolate.js)
* [DegreeToRadian](Maths/DegreeToRadian.js) * [DegreeToRadian](Maths/DegreeToRadian.js)
* [EuclideanDistance](Maths/EuclideanDistance.js)
* [EulerMethod](Maths/EulerMethod.js) * [EulerMethod](Maths/EulerMethod.js)
* [EulersTotient](Maths/EulersTotient.js) * [EulersTotient](Maths/EulersTotient.js)
* [EulersTotientFunction](Maths/EulersTotientFunction.js) * [EulersTotientFunction](Maths/EulersTotientFunction.js)
@ -249,6 +250,7 @@
* [SumOfDigits](Maths/SumOfDigits.js) * [SumOfDigits](Maths/SumOfDigits.js)
* [SumOfGeometricProgression](Maths/SumOfGeometricProgression.js) * [SumOfGeometricProgression](Maths/SumOfGeometricProgression.js)
* [TwinPrime](Maths/TwinPrime.js) * [TwinPrime](Maths/TwinPrime.js)
* [TwoSum](Maths/TwoSum.js)
* [Volume](Maths/Volume.js) * [Volume](Maths/Volume.js)
* [WhileLoopFactorial](Maths/WhileLoopFactorial.js) * [WhileLoopFactorial](Maths/WhileLoopFactorial.js)
* [ZellersCongruenceAlgorithm](Maths/ZellersCongruenceAlgorithm.js) * [ZellersCongruenceAlgorithm](Maths/ZellersCongruenceAlgorithm.js)