Go語(yǔ)言編程練手——?jiǎng)P撒加密

Go語(yǔ)言編程練手——?jiǎng)P撒加密


前言

自閉FW了小半個(gè)月,一下就來(lái)到8月份了,不想再肥宅下去了,于是整理了下之前實(shí)驗(yàn)課做過(guò)的一些東西铲球,傳傳到github上。

今天整理的是大二上學(xué)期密碼學(xué)實(shí)驗(yàn)課的幾個(gè)實(shí)驗(yàn)晰赞,用MFC寫的凱撒加密稼病、DES、SM4宾肺、RSA溯饵。代碼和實(shí)驗(yàn)報(bào)告均傳到了github上了
https://github.com/Miracle778/my_Crypto_lab

剛好之前看了看Go語(yǔ)言,但感覺(jué)不怎么熟練锨用,于是想著,用Go語(yǔ)言重寫下這幾個(gè)實(shí)驗(yàn)看看隘谣,于是有了這一篇水文增拥。


下面部分是我今天寫之前做的簡(jiǎn)單記錄,就粗糙著貼出來(lái)吧寻歧,各位看官就將就著看吧掌栅。


凱撒加密go語(yǔ)言實(shí)現(xiàn)

設(shè)計(jì)過(guò)程

分為三個(gè)模塊

1.輸入交互模塊

先選擇功能 加密或解密
選擇好后,輸入明文/密文码泛,然后密鑰
把輸入的數(shù)據(jù)傳給加解密模塊

定義一個(gè)結(jié)構(gòu)體作為該模塊的傳遞消息格式

type Msg struct {
    Flag int // 0代表加密 1代表解密
    Data string //明文或密文
    Key int  //密鑰
}

密文和明文可以含有空格猾封,于是Msg.Data用bufio.NewReader()進(jìn)行輸入
密文明文里也可以含有數(shù)字,數(shù)字加解密以10為一輪
如果用Scanf多次輸出的時(shí)候噪珊,千萬(wàn)記得吃掉緩沖里的回車

//這兩行相當(dāng)于c語(yǔ)言getchar
inputReader := bufio.NewReader(os.Stdin)
 _, err := inputReader.ReadString('\n')

2.Caesar密碼算法模塊

根據(jù)輸入模塊傳進(jìn)來(lái)的參數(shù)晌缘,進(jìn)行Caesar算法加/解密,然后把結(jié)果傳給輸出模塊

3.輸出結(jié)果

把加/解密結(jié)果輸出


代碼

圖也懶得截了痢站,直接放代碼吧
代碼因?yàn)槭菐е炀欸o語(yǔ)言去的磷箕,所以盡可能多的用了一下東西
如不同的輸入、結(jié)構(gòu)體阵难、自定義errors岳枷、異常處理等

//caesar.go
package main

import (
    "bufio"
    "errors"
    "fmt"
    "os"
)

var (
    message string
    cipher  string
    key     int
)

type Msg struct {
    Flag int // 選擇功能
    Data string
    Key  int
}

func main() {
    msg, err := typeIn()
    for err != nil {
        fmt.Println(err, "\n--------------------")
        msg, err = typeIn()
    }
    out := caesar(msg)
    fmt.Println(out)
}

func typeIn() (*Msg, error) {
    In := new(Msg)
    inputerr := errors.New("輸入錯(cuò)誤,請(qǐng)重新輸入")

    fmt.Println("請(qǐng)輸入0或1選擇功能:\n0.加密\n1.解密")
    fmt.Scanf("%d", &In.Flag)
    //這兩行相當(dāng)于c語(yǔ)言getchar
    inputReader := bufio.NewReader(os.Stdin)
    _, err := inputReader.ReadString('\n')

    if In.Flag != 0 && In.Flag != 1 {
        return In, inputerr
    }
    fmt.Println("輸入你的明文或者密文")

    Data, _, err := inputReader.ReadLine()
    In.Data = string(Data)

    fmt.Println("輸入密鑰key")
    fmt.Scanf("%d", &In.Key)

    //吃回車
    _, err = inputReader.ReadString('\n')

    if err != nil {
        panic("typeIn()出錯(cuò)")
    }

    return In, nil
}

func caesar(msg *Msg) string {
    data := []byte(msg.Data)
    var keyS, keyN byte
    if msg.Flag == 0 {
        //加密
        keyS = byte(msg.Key % 26)
        keyN = byte(msg.Key % 10)
    } else {
        //解密
        keyS = 26 - byte(msg.Key%26)
        keyN = 10 - byte(msg.Key%10)
    }
    for k, v := range data {
        if v >= 97 && v <= 122 {
            //小寫字母
            if v+keyS > 122 {
                v = v + keyS - 26
            } else {
                v = v + keyS
            }
            data[k] = v
        } else if v >= 65 && v <= 90 {
            //大寫字母
            if v+keyS > 90 {
                v = v + keyS - 26
            } else {
                v = v + keyS
            }
            data[k] = v
        } else if v >= 48 && v <= 57 {
            //數(shù)字
            if v+keyN > 57 {
                v = v + keyN - 10
            } else {
                v = v + keyN
            }
            data[k] = v
        }
    }
    res := string(data)
    return res
}


總結(jié)

Go語(yǔ)言也太難受了吧,代碼格式太強(qiáng)制了吧...呜叫,還是Python香空繁。
懟著輸入搞了半天總算搞清楚Scan Scanf Scanln bufio.NewReader這幾個(gè)該怎么用了。

這幾天再整理整理朱庆,把之前幾個(gè)別的實(shí)驗(yàn)課的pyqt的項(xiàng)目跟python網(wǎng)絡(luò)編程的東西備份到github上去盛泡,哎,不知不覺(jué)就大四了...

好久沒(méi)水文章了椎工,自閉了小半個(gè)月饭于,是時(shí)候逃離肥宅狀態(tài)了蜀踏。
前幾天也看了看Java反序列化的東西,過(guò)兩天貼上來(lái)掰吕。

最后引用一句著名藝術(shù)家lb的名言結(jié)束

總有人要當(dāng)FW 那為什么不能是我呢 (/dog


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末果覆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子殖熟,更是在濱河造成了極大的恐慌局待,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菱属,死亡現(xiàn)場(chǎng)離奇詭異钳榨,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)纽门,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門薛耻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人赏陵,你說(shuō)我怎么就攤上這事饼齿。” “怎么了蝙搔?”我有些...
    開(kāi)封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵缕溉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我吃型,道長(zhǎng)证鸥,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任勤晚,我火速辦了婚禮枉层,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘运翼。我一直安慰自己返干,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布血淌。 她就那樣靜靜地躺著矩欠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪悠夯。 梳的紋絲不亂的頭發(fā)上癌淮,一...
    開(kāi)封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音沦补,去河邊找鬼乳蓄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛夕膀,可吹牛的內(nèi)容都是我干的虚倒。 我是一名探鬼主播美侦,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼魂奥!你這毒婦竟也來(lái)了菠剩?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤耻煤,失蹤者是張志新(化名)和其女友劉穎具壮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哈蝇,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棺妓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了炮赦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怜跑。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吠勘,靈堂內(nèi)的尸體忽然破棺而出妆艘,到底是詐尸還是另有隱情,我是刑警寧澤看幼,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站幌陕,受9級(jí)特大地震影響诵姜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搏熄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一棚唆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧心例,春花似錦宵凌、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至译株,卻和暖如春瓜喇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背歉糜。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工乘寒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人匪补。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓伞辛,卻偏偏與公主長(zhǎng)得像烂翰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚤氏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • CTF中那些腦洞大開(kāi)的編碼和加密 0x00 前言 正文開(kāi)始之前先閑扯幾句吧甘耿,玩CTF的小伙伴也許會(huì)遇到類似這樣的問(wèn)...
    查無(wú)此人asdasd閱讀 5,973評(píng)論 0 19
  • 0x01 目錄 常見(jiàn)編碼: ASCII編碼 Base64/32/16編碼 shellcode編碼 Quoted-p...
    H0f_9閱讀 12,655評(píng)論 2 17
  • 像對(duì)每位異性都懷有期待一樣 來(lái)看望我 問(wèn)候手掌上的缺口,問(wèn)候干糙的臉頰 ———請(qǐng)竭力付出一點(diǎn) 用來(lái)吻吻我的落滿灰塵...
    湯米呢閱讀 244評(píng)論 0 3