настоящее время я использую 2 массивы:Замена текста не будет идти правильно с кодированием и декодированием
let letters:[Character] =
[" ","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","!","@","#","$","%","^","&","*","(",")","1","2","3","4","5","6","7","8","9","0","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","E","S","T","U","V","W","X","Y","Z"]
let cypher:[Character] = ["o","p","q","r","a","b","c","d","e","f","g","h","i","u","v","w","x","y","z","j","k","l","m","n","s","t","$","@","#","!","&","%","^","*","("," ",")","5","7","2","9","8","0","1","3","2","4","Q","W","E","R","T","Y","U","I","O","P","A","S","D","F","G","H","J","K","L","Z","X","C","V","B","N","M"]
Оба 73 символов.
Я использую эту строку кода для кодирования вставленный текст:
var encode:[Character:Character] = [:]
for (index, letter) in letters.enumerated() { encode[letter] = cypher[index] }
let encodeStep1 = String(insertedText.characters.map({ encode[$0] ?? $0 }))
randomNumber = Int(arc4random_uniform(9) + 1)
var encodeStep2 = cypher.rotate(shift: randomNumber)
for (index, letter) in letters.enumerated() { encode[letter] = encodeStep2[index] }
let final = String(encodeStep1.characters.map({ encode[$0] ?? $0 }))
Decode:
var decode:[Character:Character] = [:]
let step1 = cypher.rotate(shift: (randomNumber))
for (index, letter) in step1.enumerated() { decode[letter] = letters[index] }
let step1Decoded = String(insertedEncryptedText.characters.map({ decode[$0] ?? $0 }))
for (index, letter) in cypher.enumerated() { decode[letter] = letters[index] }
let step2Decoded = String(step1Decoded.characters.map({ decode[$0] ?? $0 }))
Поворот функции:
extension Array {
func rotate(shift:Int) -> Array {
var array = Array()
if (self.count > 0) {
array = self
if (shift > 0) {
for i in 1...shift {
array.append(array.remove(at: 0))
}
}
else if (shift < 0) {
for i in 1...abs(shift) {
array.insert(array.remove(at: array.count-1),at:0)
}
}
}
return array
}
}
Для некоторых очень странной причине, номер «3» часто отображается как число «9» при декодировании. Из того, что я видел, проблема возникает на этапе 2Decoded. Я просто не могу понять, что я делаю неправильно. Это, однако, часть кода, если мне нужно опубликовать больше, я могу это сделать.
Где код для 'rotate'? например 'Cypher.rotate (сдвиг: randomNumber)' – Aaron
Привет Аарон, это: вар расшифровывает: [Характер: Характер] = [:] пусть (сдвиг: (randomNumber)) шаг1 = cypher.rotate для (индекс, письмо) в step1.enumerated() {decode [letter] = буквы [index]} let step1Decoded = String (insertEncryptedText.characters.map ({decode [$ 0] ?? $ 0})) для (индекс, буква) в cypher.enumerated() {decode [letter] = letters [index]} let step2Decoded = String (step1Decoded.characters.map ({decode [$ 0] ?? $ 0})) – Petravd1994
OP: Аарон предоставил правдоподобный ответ - - если это правильно, вы должны принять его; если неверно, прокомментируйте его ответ. –