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

Шифрование текста с ключом

21.12.2016, 02:31. Показов 1629. Ответов 3

Доброго времени суток.
Недавно в университете начали изучать Ruby и преподаватель дал одно интересное, но сложное задание: нужно разбить заданный рядок символов на подстроки длинной n и поменять символы местами в соответствии с ключом.

Пример:
Входящий рядок: Hello,_world!
Ключ: 312654
Выходящий рядок: lHe,olo_w!dr

Буду очень благодарен за любые советы и подсказки!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2016, 02:31
Ответы с готовыми решениями:

Шифрование методом перестановки с заданным ключом текста любой длины
здравствуйте прошу помочь с исправлением кода #include <iostream> #include <string> #include...

Шифрование методом перестановки символов открытого текста в соответствии с некоторым правилом (ключом)
Здравствуйте,хочу обратиться за помощью в написании консольной программы(C ++ Visual studio),буду...

Битное шифрование с ключом
Как работает битное шифрование? Дайте пример, если не сложно Заранее спасибо

Шифрование перестановкой с ключом
Доброго времени суток. Вопрос следующий. Дано задание зашифровать текстовый файл методом...

3
the hardway first
Эксперт JS
2242 / 1674 / 837
Регистрация: 05.06.2015
Сообщений: 3,405
21.12.2016, 09:45 2
DenisHardbass, из вашего примера не понятно, каким образом ключ используется для перемешивания символов во фразе.

Если предположить, что берется подстрока длиной равной длине ключа и перемешивается согласно цифрам ключа, то в результате должна быть такая строка: lHe,olo_wdlr!
0
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 2
21.12.2016, 16:25  [ТС] 3
Извините, пропустил букву L
Цитата Сообщение от DenisHardbass Посмотреть сообщение
lHe,olo_w!dr
, а так вы правильно поняли задание
0
the hardway first
Эксперт JS
2242 / 1674 / 837
Регистрация: 05.06.2015
Сообщений: 3,405
22.12.2016, 10:04 4
Лучший ответ Сообщение было отмечено DenisHardbass как решение

Решение

Значит, если я правильно понял, то на ключ накладываются некоторые ограничения:
  • последовательность цифр от 1 до 9, в зависимости от длины ключа
  • длина ключа не может быть больше 9
  • цифры в ключе должны представлять непрерывную последовательсть от 1 до 9
  • цифры в ключе не могут повторяться
spec/crypto_spec.rb
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
require 'crypto'
 
RSpec.describe Crypto do
  subject { described_class.new key }
 
  describe 'decode and encode phrase' do
    let(:decoded) { 'Hello,_world!' }
    let(:encoded) { 'lHe,olo_wdlr!' }
    let(:key) { '312654' }
 
    describe '#encode' do
      it 'return encoded string' do
        expect(subject.encode decoded).to eq encoded
      end
    end
 
    describe '#decode' do
      it 'return decoded string' do
        expect(subject.decode encoded).to eq decoded
      end
    end
  end
 
  describe 'encode and decode string with random key' do
    it 'successfully' do
      decoded = 'Lorem ipsum dolor sit amet'
      (2..9).each do |i|
        crypto = Crypto.new (1..i).to_a.shuffle.join
        encoded = crypto.encode decoded
        expect(crypto.decode encoded).to eq decoded
      end
    end
  end
 
  describe 'key' do
    it 'must be sequental of unique numbers' do
      expect do
        described_class.new '11'
      end.to raise_error ArgumentError, 'Key values must be unique'
    end
 
    it 'length must be between 2 and 9' do
      expect do
        described_class.new '1234567890'
      end.to raise_error ArgumentError, 'Key length must be between 2 and 9'
    end
 
    it 'values must be in 123456789' do
      expect do
        described_class.new '0123'
      end.to raise_error ArgumentError, 'Key values must be in 123456789'
    end
  end
end
lib/crypto.rb
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
class Crypto
  def initialize(key)
    @key = validate key
  end
 
  def encode(str)
    perform str do |sequence|
      @key.map { |i| sequence[i - 1] }
    end
  end
 
  def decode(str)
    perform str do |sequence|
      normalize_encoded! sequence
 
      tmp = Array.new @key.size
      @key.each_with_index { |k, i| tmp[k - 1] = sequence[i] }
      tmp
    end
  end
 
  private
 
  # TODO: Extract to "Validator" module/class
  def validate(key)
    key = key.to_s
    key = key.chars.map(&:to_i)
 
    error = 'Key values must be of 123456789' if key.sort != (1..key.size).to_a
    error = 'Key values must be unique' if key.uniq.length != key.length
    error = 'Key length must be between 2 and 9' if key.size < 2 || key.size > 9
    raise ArgumentError, error if error
 
    return key
  end
 
  def perform(str)
    str.chars
      .each_slice(@key.size)
      .map { |sequence| yield sequence }
      .join
  end
 
  # Fill sequence with nil when key value is greater than sequence length
  def normalize_encoded!(sequence)
    return if @key.size == sequence.size
 
    encoded_size = sequence.size
    @key.each_with_index do |k, i|
      sequence.insert(i, nil) if k > encoded_size
    end
  end
end
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2016, 10:04

Шифрование таблицей с ключом
Добрый день форумчане. Стоит задача сделать прогу для шифрования таблицей с ключом. У меня...

Шифрование с открытым ключом
Заинтересовался недавно шифрованием, слышал что есть так называемые &quot;open source&quot; шифраторы, но...

Шифрование данных ПРИВАТНЫМ ключом
Да-да, я знаю что это не шифрование, а создание ЭЦП. Также знаю, что в crypto api эта функция...

Шифрование открытым ключом в браузере
Добрый день, посоветуйте плиииз библиотеку, или примеры. Задача: Зашифровать у одного клиента в...

Программа шифрование-дешифрование(с ключом) в QBasic
REM programma chifrovan/deshifrovan DIM x(n), y$(n), y1$(255), x1(255), yk$(255), xk(255),...

Шифрование цезаря, с периодическим ключом и лозунговый шифр
Всем доброго времени суток, к завтрешнему дню нужно написать 3 шифра: Шифр Цезаря, Шифрование с...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.