Skip to content

Commit

Permalink
update new algoritms and md5
Browse files Browse the repository at this point in the history
  • Loading branch information
DevelSam committed Oct 17, 2024
1 parent becefea commit 6abddc1
Show file tree
Hide file tree
Showing 3 changed files with 153 additions and 21 deletions.
154 changes: 139 additions & 15 deletions Script.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@

const methodShifra = document.getElementById('method-shifra');
const acction = document.getElementById('deshif');
const acction_select = document.getElementById('acction')
let language
let sdvig
let key
const sdvig_container = document.getElementById('sdvig-container')
const languageContainer = document.getElementById('language-container');
const key_container = document.getElementById('key_container')
methodShifra.addEventListener('change', function () {
languageContainer.innerHTML = "";
sdvig_container.innerHTML = ""
key_container.innerHTML = ""
if (methodShifra.options[methodShifra.selectedIndex].classList.contains('no-deshif')) {
acction.disabled = true;
}
Expand Down Expand Up @@ -43,8 +47,8 @@ methodShifra.addEventListener('change', function () {
languageContainer.appendChild(label);
languageContainer.appendChild(select);
}
if (methodShifra.options[methodShifra.selectedIndex].classList.contains('select_sdvig')){
const label = document.createElement('label')
if (methodShifra.options[methodShifra.selectedIndex].classList.contains('select_sdvig')) {
const label = document.createElement('label')
label.setAttribute('for', 'sdvig_number')
label.textContent = 'Выберите шаг'

Expand All @@ -57,6 +61,20 @@ methodShifra.addEventListener('change', function () {
sdvig_container.append(label)
sdvig_container.append(input)
}
if (methodShifra.options[methodShifra.selectedIndex].classList.contains('select_key')){
const label = document.createElement('label')
label.setAttribute('for', 'key_str')
label.setAttribute('class', 'key-text')
label.textContent = 'Напишите ключ'

const input = document.createElement('input')
input.setAttribute('id', 'key_str')
input.setAttribute('class', 'key-input')
input.setAttribute('type', 'text')
input.setAttribute('maxlength', '20')
key_container.append(label)
key_container.append(input)
}
});

document.getElementById('zashifrovat').addEventListener('click', reshit);
Expand All @@ -68,13 +86,17 @@ function reshit() {
if (methodShifra.options[methodShifra.selectedIndex].classList.contains('select_language')) {
language = document.getElementById('language').value
}
if (methodShifra.options[methodShifra.selectedIndex].classList.contains('select_sdvig')){
if (methodShifra.options[methodShifra.selectedIndex].classList.contains('select_sdvig')) {
sdvig = document.getElementById('sdvig_number').value
}
if (methodShifra.options[methodShifra.selectedIndex].classList.contains('select_key')){
key = document.getElementById('key_str').value
}
if (text === '') {
result.innerText = 'Заполните поле с текстом!'
return result
}

switch (shifr) {
case 'atbash':
return result.innerText = atbash_shifr(text, acction, language);
Expand All @@ -83,13 +105,14 @@ function reshit() {
return result.innerText = chezar_shifr(text, acction, language, sdvig);
break;
case 'bekon':
return result.innerText = bekon_shifr(text, acction);
return result.innerText = bekon_shifr(text, acction, language);
break;
case 'vizhener':
return result.innerText = vizhener_shifr(text, acction);
return result.innerText = vizhener_shifr(text, acction, language, key);
break;
case 'Shifr_md5':
return result.innerText = Shifr_md5(text);
break;
default:
return result.innerText = 'Выберите шифр!';
}
Expand All @@ -98,7 +121,7 @@ function reshit() {
}
function atbash_shifr(text, acction, language) {
let alfavit, reversealfavit;

if (language === 'english') {
alfavit = 'abcdefghijklmnopqrstuvwxyz'
reversealfavit = 'zyxwvutsrqponmlkjihgfedcba'
Expand Down Expand Up @@ -164,8 +187,6 @@ function atbash_shifr(text, acction, language) {
function chezar_shifr(text, acction, language, sdvig) {
let alfavit;
let result = ""
console.log(typeof(sdvig))

if (language === 'english') {
alfavit = 'abcdefghijklmnopqrstuvwxyz'
}
Expand Down Expand Up @@ -218,7 +239,7 @@ function chezar_shifr(text, acction, language, sdvig) {
let char = text[i].toLowerCase()
let indextext = alfavit.indexOf(char)
let shifrindex = (indextext - shift + alfavit.length) % alfavit.length

if (indextext !== -1) {
result += alfavit[shifrindex]
}
Expand All @@ -231,12 +252,115 @@ function chezar_shifr(text, acction, language, sdvig) {
}
}

function bekon_shifr() {
return 'в разработке'
function bekon_shifr(text, acction, language) {
let alfavit, bacontable, result
if (language === 'russian') {
alfavit = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
bacontable = {
"а": "AAAAA", "б": "AAAAB", "в": "AAABA", "г": "AAABB", "д": "AABAA",
"е": "AABAB", "ё": "AABBA", "ж": "AABBB", "з": "ABAAA", "и": "ABAAB",
"й": "ABABA", "к": "ABABB", "л": "ABBAA", "м": "ABBAB", "н": "ABBBA",
"о": "ABBBB", "п": "BAAAA", "р": "BAAAB", "с": "BAABA", "т": "BAABB",
"у": "BABAA", "ф": "BABAB", "х": "BABBA", "ц": "BABBB", "ч": "BBAAA",
"ш": "BBAAB", "щ": "BBABA", "ъ": "BBABB", "ы": "BBBAA", "ь": "BBBAB",
"э": "BBBBA", "ю": "BBBBB", "я": "BBBBB"
}
}
if (language === 'english') {
alfavit = 'abcdefghijklmnopqrstuvwxyz'
bacontable = {
"a": "AAAAA", "b": "AAAAB", "c": "AAABA", "d": "AAABB", "e": "AABAA",
"f": "AABAB", "g": "AABBA", "h": "AABBB", "i": "ABAAA", "j": "ABAAB",
"k": "ABABA", "l": "ABABB", "m": "ABBAA", "n": "ABBAB", "o": "ABBBA",
"p": "ABBBB", "q": "BAAAA", "r": "BAAAB", "s": "BAABA", "t": "BAABB",
"u": "BABAA", "v": "BABAB", "w": "BABBA", "x": "BABBB", "y": "BBAAA",
"z": "BBAAB"

};
}
if (acction === 'shifrovka') {
let text_low = text.toLowerCase()
result = ""
for (let i = 0; i < text_low.length; i++) {
const char = text_low[i]
if (alfavit.includes(char)) {
result += bacontable[char]
}
else {
result += char
}
}
}
else {
let current = ""
result = ""
for (let i = 0; i < text.length; i++) {
const char = text[i]
if (char === " ") {
result += " "
}
else {
current += char
if (current.length === 5) {
let decodchar = Object.keys(bacontable).find(key => bacontable[key] === current)
result += decodchar ? decodchar : current
current = ""

}
}
}
}
return result
}
function vizhener_shifr() {
return 'в разработке'
function vizhener_shifr(text, acction, language, key) {
let alfavit, result,charindex,keyCharIndex;
result = ""
alfavit = ""
console.log(key)
if(language === 'russian'){
alfavit = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
}
else if (language === 'english'){
alfavit = 'abcdefghijklmnopqrstuvwxyz';
}
else {
result += "Неверный язык. Используйте 'Русский' или 'Английский'."
return result

}

keylower = key.toLowerCase()
textlower = text.toLowerCase()
let keyIndex = 0;
for(let i = 0 ; i < text.length; i++){

const char = textlower[i]

if(alfavit.includes(char)){
charindex = alfavit.indexOf(char)
keyCharIndex = alfavit.indexOf(keylower[keyIndex % keylower.length])

if(acction === 'shifrovka'){
const shifIndex = ( charindex + keyCharIndex) % alfavit.length;
console.log(alfavit)
result += text[i] === text[i].toUpperCase() ? alfavit[shifIndex].toUpperCase() : alfavit[shifIndex]
}
else if(acction === 'deshifrovanie'){
const decryptedIndex = (charindex - keyCharIndex + alfavit.length) % alfavit.length;
result += text[i] === text[i].toUpperCase() ? alfavit[decryptedIndex].toUpperCase() : alfavit[decryptedIndex]
}
keyIndex++
}
else{
result += char
}
}
return result
}
function Shifr_md5() {
return 'в разработке'
function Shifr_md5(text, acction) {
if(acction ==='deshifrovanie'){
return 'Дешифрование не работает на хэш!'
}
var hash = CryptoJS.MD5(text);
return hash
}
14 changes: 8 additions & 6 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,17 @@ <h1>Шифрование и дешифрока слов</h1>
<option class="no-deshif" value="Shifr_md5">Шифр md5</option>
<option class="select_language" value="atbash">шифр Атбащ</option>
<option class="select_language select_sdvig" value="chezar">Шифр Цезаря</option>
<option value="bekon">Шифр Бэкона</option>
<option value="vizhener">Шифр Виженера</option>
<option class="select_language" value="bekon">Шифр Бэкона</option>
<option class="select_language select_key" value="vizhener">Шифр Виженера</option>
<!-- <option class="no-deshif" value="Shifr_md5">Шифр md5</option>
<option class="no-deshif" value="8">Шифр md5</option> -->
</select>
</div>
<div class="select-acction">
<label for="acction" class="acction">Выберите действие</label>
<select name="acction" id="acction">
<option id="deshif" value="deshifrovanie">дешифровка</option>
<option value="shifrovka">шифровка</option>
<option id="deshif" value="deshifrovanie" disabled="true">дешифровка</option>
</select>

</div>
Expand All @@ -40,14 +40,16 @@ <h1>Шифрование и дешифрока слов</h1>
<!-- <label for="sdvig_number" class="sdvig-text">Выберите шаг</label>
<input id="sdvig_number" class="sdvig-input" type="number" max="10" min="2"> -->
</div>
<div class="key" id="key_container">
<!-- <label for="key_str" class="key-text">Напишите ключ</label>
<input type="text" id="key_str" class="key-input" maxlength="20"> -->
</div>
<button id="zashifrovat" class="button">Отправить данные</button>
<br>
<span class="result"></span>
</div>
</div>
<script>

</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script>
<script src="./Script.js"></script>
</body>
</html>
6 changes: 6 additions & 0 deletions style.css
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,10 @@
}
.result{
font-size: 18px;
}
.key{
margin: 20px;
}
.key-text{
margin-right: 15px;
}

0 comments on commit 6abddc1

Please sign in to comment.