
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
沒有留言:
張貼留言
0.留言請選擇註冊帳號, Google 或 OpenID 均可
1.歡迎留言交流,但不歡迎垃圾留言及廣告留言
2.文章相關問題歡迎提出,請減少情緒性留言
3.非文章相關內容,請到 G+ 社群或 FB 社團提出
4.問作業之留言會被直接刪除
5.莫忘網路禮節
6.可使用部份HTML標記,如 <b> 、 <i> 、 <a>
7.站長保留刪除留言的權力