0 / 0 / 0
Регистрация: 13.05.2019
Сообщений: 17
1

Шифр Плейфера, подскажите где ошибка в коде?

27.10.2022, 19:30. Показов 216. Ответов 0

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Есть код шифра Плейфера, он шифрует но не так.
Вписываю Ключ :ANDROID
Шифрую слово: Google
Получаю шифротекст:LAALKF , а должен получать MAAMTL что ни так не пойму.

Код
package com.makentoshe.chiperchan.model.cipher

import java.util.*

// For more info see https://rosettacode.org/wiki/Playfair_cipher#Java
class PlayfairCipher(key: String) : Cipher {
    private val charTable = Array(5) { CharArray(5) }
    private val positions = arrayOfNulls<Pair<Int, Int>>(26)

    private val AByte_eng = 'A'.toInt()
    private val aByte_eng = 'a'.toInt()
    private val AByte_ru = 'А'.toInt()
    private val aByte_ru = 'а'.toInt()

    init {
        val s: String =
            prepareText(key.toUpperCase(Locale.ROOT) + "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
        val len = s.length
        var i = 0
        var k = 0
        while (i < len) {
            val c = s[i]
            if (positions[c - 'A'] == null) {
                charTable[k / 5][k % 5] = c
                positions[c - 'A'] = Pair(k % 5, k / 5)
                k++
            }
            i++
        }
    }

    private fun prepareText(s: String): String {
        return s.replace("Q", "")
    }

    override fun encode(string: String): String {
        val sb = StringBuilder(string)
        var i = 0
        while (i < sb.length) {
            if (i == sb.length - 1) {
                sb.append(if (sb.length % 2 == 1) 'X' else "")
            } else if (sb[i] == sb[i + 1]) {
                sb.insert(i + 1,'X')
            }
            i += 2
        }
        return codec(sb, 1)
    }

    override fun decode(string: String): String {
        return codec(StringBuilder(prepareText(string)), 4)
    }

    private fun codec(text: StringBuilder, direction: Int): String {
        val len = text.length
        var i = 0
        while (i < len) {
            val a = text[i]
            val b = text[i + 1]
            var row1: Int = positions[index(a)]!!.second
            var row2: Int = positions[index(b)]!!.second
            var col1: Int = positions[index(a)]!!.first
            var col2: Int = positions[index(b)]!!.first
            if (row1 == row2) {
                col1 = (col1 + direction) % 5
                col2 = (col2 + direction) % 5
            } else if (col1 == col2) {
                row1 = (row1 + direction) % 5
                row2 = (row2 + direction) % 5
            } else {
                val tmp = col1
                col1 = col2
                col2 = tmp
            }
            text.setCharAt(i, charTable[row1][col1])
            text.setCharAt(i + 1, charTable[row2][col2])
            i += 2
        }
        return text.toString()
    }

    private fun index(c: Char): Int {
        return when (c) {
            in 'a'..'z' -> {
                c.toInt() - aByte_eng
            }
            in 'A'..'Z' -> {
                c.toInt() - AByte_eng
            }
            in 'А'..'Я' -> {
                c.toInt() - AByte_ru
            }
            in 'а'..'я' -> {
                c.toInt() - aByte_ru
            }
            else -> {
                0
            }
        }
    }

    class Factory : Cipher.Factory {

        override val title = "Шифр Плейфера"

        override fun build(parameters: Map<String, Any>): PlayfairCipher {
            val key = (parameters["key"] as? String?)
                ?: throw IllegalAccessException("`key` parameter is required and should be string")
            return PlayfairCipher(key)
        }

        override fun getParameters(): List<Cipher.Parameter> {
            return listOf(
                Cipher.Parameter(
                    name = "key",
                    displayName = "Ключ",
                    spec = Cipher.Spec(Cipher.Type.String)
                )
            )
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2022, 19:30
Ответы с готовыми решениями:

Шифр Плейфера - найти ошибку в коде
подскажите, почему не работает, не могу найти таких пространств имен, код взят с буржуинского сайта...

Шифр Плейфера - найти ошибку в коде
namespace Playfair_code { public partial class Form1 : Form { public Form1() ...

подскажите где ошибка в коде!
Дана строка из слов. Нужно равномерно распределить пробелы между словами и чтоб длина строки была...

Подскажите где ошибка в коде ?
REM Вводим исходные данные N1: DC 3 N2: DC 9 N3: DC 4 N4: DC 5 C: DC 5 Y: DC 0 REM ...

0
27.10.2022, 19:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2022, 19:30
Помогаю со студенческими работами здесь

Подскажите где ошибка в коде
Здравствуйте подскажите где ошибка в коде $query = mysql_query(&quot;SELECT * FROM `city` WHERE ...

Подскажите где ошибка в коде
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { ...

Подскажите, где ошибка в коде
Дан текст. В каждом слове текста заменить заданную литеру заданной литерой (сочетанием литер)....

Подскажите где в коде ошибка
Мой код $ver=$pdo-&gt;prepare($sqlRec); if ($id!=-1){$ver-&gt;bindParam( ':id', $id);}...

Подскажите где ошибка в коде
Здравствуйте. Помогите пожалуйста исправить код. Условие : Создать Web-страницу, содержащую...

Ошибка в коде. Подскажите где
#include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; int main (){ double...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru