Encrypt.swift
// // Encrypt.swift // EncryptCommandLine // // Created by 張凱慶 on 2015/3/4. // Copyright (c) 2015年 張凱慶. All rights reserved. // import Cocoa class Encrypt: NSObject, NSCoding { // 英文小寫字母表 let alphabet = "abcdefghijklmnopqrstwuvxyz" // 密碼表整數陣列 var code = Array(arrayLiteral: 26) // 建構子改寫自 NSObject override init() { super.init() setCode() } // NSCoding 的建構子 required init(coder decoder: NSCoder) { super.init() alphabet = decoder.decodeObjectForKey("alphabet") as String code = decoder.decodeObjectForKey("code") as Array } // NSCoding 的方法 func encodeWithCoder(encoder: NSCoder) { encoder.encodeObject(alphabet, forKey: "alphabet") encoder.encodeObject(code, forKey: "code") } // 設定密碼表 func setCode() { var a = 0 var b = 0 // a 必須是奇數 while a % 2 == 0 { a = Int(arc4random() % 10) b = Int(arc4random() % 10) } var c = 97 var i: Int, x: Int, y: Int, m: Int // 以迴圈取得每一個餘數 for i = 0; i < 26; i++ { x = c y = x * a + b m = y % 26 code.append(m) c++ } // 移除第一個預設值 code.removeAtIndex(0) } // 由字元從字母表中找到索引值 func findAlphabetIndex(chr: Character) -> Int { var i = 0 for c in alphabet { if chr == c { return i } i++ } return 0 } // 由字元從密碼表中找到索引值 func findCodeIndex(chr: Character) -> Int { var n = findAlphabetIndex(chr) var i = 0 for d in code { if d == n { return i } i++ } return -1 } // 判斷是否為英文小寫字母的字元 func isLowercase(chr: Character) -> Bool { for i in alphabet { if (chr == i) { return true } } return false } // 由索引值找到密碼表中對應的字元 func findCode(number: Int) -> Character { let index = code[number] var i = 0 for s in alphabet { if i == index { return s } i++ } return Character("") } // 由索引值找到字母表中對應的字元 func findLetter(index: Int) -> Character { var i = 0 for s in alphabet { if i == index { return s } i++ } return Character("") } // 進行編碼的方法 func toEncode(str: String) -> String { var newStr = "" for chr in str { if isLowercase(chr) { newStr.append(findCode(findAlphabetIndex(chr))) } else { newStr.append(chr) } } return newStr } // 進行解碼的方法 func toDecode(str: String) -> String { var newStr = "" for chr in str { if isLowercase(chr) { newStr.append(findLetter(findCodeIndex(chr))) } else { newStr.append(chr) } } return newStr } }
the end
沒有留言:
張貼留言