Я делаю заявку на доклад на тему безопасности системы. Цезарь быстрый код.и я столкнулся с проблемой, находясь в фазе дешифрования.
Когда я ввожу ключ, программа случайным образом выбивает ошибку:
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
Или ошибка выхода из массива
Я новичок.Пожалуйста, объясните мне, как я могу исправить эту ошибку и заставить мою программу работать должным образом.
Google не помог мне.
import UIKit
class CaesarCipher: UIViewController {
@IBOutlet weak var messageText: UITextField!
@IBOutlet weak var keyText: UITextField!
@IBOutlet weak var cipherTextLabel: UILabel!
////////////////////////////////////////////////////////////////////////////
@IBOutlet weak var cryptMessageText: UITextField!
@IBOutlet weak var cryptKeyText: UITextField!
@IBOutlet weak var decryptTextLabel: UILabel!
@IBAction func cipherButton(_ sender: Any) {
if (messageText.text == "") || (keyText.text == "")
{
let alert = UIAlertController(title: "Ошибка", message: "Одно, или несколько полей пустые", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ок", style: .default, handler: nil))
self.present(alert, animated: true)
}
else
{
let key = keyText.text
let e: Int32 = Int32.init(key!)!
//let upKey: Int32 = Int32.init(&e)
let messageCipher = messageText.text
// var i: Int8 = Int8.init(messageCipher!)!
//let up: UnsafeMutablePointer<Int8> = UnsafeMutablePointer<Int8>.init(&i)
//cipherTextLabel = encrypt(up, e)
let encryptText = cipher(messageCipher!, shift: Int(e))
cipherTextLabel.text = "\(encryptText)"
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
@IBAction func decryptButton(_ sender: Any) {
if (cryptMessageText.text == "") || (cryptKeyText.text == "")
{
let alert = UIAlertController(title: "Ошибка", message: "Одно, или несколько полей пустые", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ок", style: .default, handler: nil))
self.present(alert, animated: true)
}
else
{
let cryptKey = cryptKeyText.text
let e: Int = Int.init(cryptKey!)!
//let upKey: Int32 = Int32.init(&e)
let decryptMessageText = cryptMessageText.text
// var i: Int8 = Int8.init(messageCipher!)!
//let up: UnsafeMutablePointer<Int8> = UnsafeMutablePointer<Int8>.init(&i)
//cipherTextLabel = encrypt(up, e)
let decryptText = decipher(decryptMessageText!, shift2: Int(e))
decryptTextLabel.text = "\(decryptText)"
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.hideKeyboard()
}
}
func cipher( _ text:String, shift:Int ) -> String {
var textCharArray:[Character] = Array( text.characters )
let alphabet = Array("0123456789abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUWVXYZ !".characters);
let offset = alphabet.count // alphabet.length in other languages
for i in 0 ..< text.characters.count {
let oldChar = textCharArray[ i ]
let oldCharIdx = alphabet.index( of:oldChar ) // get index of
let oldCharIdxUnwrapped = oldCharIdx // oldCharIdx can be null!
let newCharIdx = ( oldCharIdxUnwrapped! + shift + offset ) % offset
let newChar = alphabet[ newCharIdx ]
textCharArray[ i ] = newChar
}
return String( textCharArray )
}
func decipher( _ text:String, shift2:Int ) -> String {
// when calling a function you don't have to specify the first argument...
// For other arguments you have to specify it!
return cipher( text, shift:shift2 * -1 )
}