,使用凯撒密码在文本上移动字符。调用strings.Map方法。1、凯撒密码加密凯撒密码(英文:Caesarcipher),即凯撒加密、凯撒变换、变换加密,是一种最简单、最广为人知的加密技术。凯撒密码是一种替代加密技术,将明文中的所有字母向后(或向前)移位字母表中的固定数字,然后用密文代替。例如,当offset为3时,所有字母A都会被D替换;B变成E,依此类推。加密方法以罗马共和国时期的凯撒命名,据说凯撒曾用它与他的将军们进行通信。明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC设计思路设置明文和移动步长(密文)将明文转换为小写,准备明文字节切片和密文切片将每个明文字符按位移步长旋转存入密文表返回密文2.Go实现凯撒密码一般以密码形式下发。例如,代码“exxegoexsrgi”就是密码。通过四处移动字母,我们可以对消息进行编码。这会阻止随意的窥探。在Go中,我们可以使用strings.Map方法来实现这一点。2.1导入包import("fmt""strings"//包含字符串操作相关方法)2.2写凯撒方法下面我们来写caesarEn()凯撒密码加密方法。这需要一个字符串并返回修改后的字符串。它移动字符,然后将字符移动到有效范围内。//凯撒密码加密funccaesarEn(strRawstring,stepbyte)string{//1.将文本转换为小写str_raw:=strings.ToLower(strRaw)//2.定义步长step_move:=step//3.将字符串转换为明文字符切片str_slice_src:=[]byte(str_raw)fmt.Println("明文字符切片:",str_slice_src)//4.创建密文字符切片str_slice_dst:=str_slice_src//5.循环处理Textslicefori:=0;我=97+step_move{str_slice_dst[i]=str_slice_src[i]-step_move}else{//7。如果明文字符超出范围,则加26减去位移stepstr_slice_dst[i]=str_slice_src[i]+26-step_move}}//8。输出结果fmt.Println("解密结果为:",step_move,str_slice_dst,string(str_slice_dst))returnstring(str_slice_dst)}4.其他实现packagemainimport("errors""fmt""reflect""regexp")varTBL=[]rune("abcdefghijklmnopqrstuvwxyz")varCLUES=[]string{"this","the","that"}var(ErrLength=errors.New("无效长度")ErrChar=errors.New("invalidchar")ErrNoClue=errors.New("noclueword")ErrShift=errors.New("invalidshiftvalue"))funcEncrypt(instring,shint)(encstring,err错误){err=断言(in)ifsh<0{err=ErrShift}iferr!=nil{return}enc=shift(in,sh)return}funcDecrypt(instring)(decstring,shint,errerror){err=assert(in)iferr!=nil{return}varhitbool=falsesubin:=subStr(in)fori:=0;我80{err=ErrLength}return}funcshift(instring,shint)(outstring){佛r_,v:=rangein{ifv=='.'||v==''||v=='\r'||v=='\n'{out+=string(v)continue}i:=indexOf(TBL,v)len:=len(TBL)variiint=(i+sh)%len如果ii<0{ii+=len}如果ii>len{ii-=len}out+=string(TBL[ii])}return}funcsubtract(leftrune,rightrune)(outint){l:=indexOf(TBL,left)r:=indexOf(TBL,right)out=l-rifout<0{out+=len(TBL)}return}funcsubStr(instring)[]int{subin:=make([]int,0,79)fori:=rangein{如果i>len(in)-2{break}subin=append(subin,subtract([]rune(in)[i],[]rune(in)[i+1]))}//returnreturnsubin}funcindexOf(target[]rune,searchCharrune)int{fori,v:=rangetarget{ifv==searchChar{returni}}return-1}funcmain(){在:=“xlmwmwxlitmgxyvixlexmxssomrxlixvmt。”fmt.Printf("in:'%s'\n",in)out,sh,err:=Decrypt(in)fmt.Printf("输出:'%s'\n",out)fmt.Printf("sh:%d\n",sh)fmt.Printf("错误:%v\n",err)}5.测试packagemainimport("fmt""strings")funccaesar(rrune,shiftint)rune{//将字符移位指定的位数。//...如果超出范围,向后或向前移动。s:=int(r)+shiftifs>'z'{returnrune(s-26)}elseifs<'a'{returnrune(s+26)}returnrune(s)}funcmain(){value:="test"fmt.Println(value)//在strings.Map的func参数中测试caesar方法。value2:=strings.Map(func(rrune)rune{返回caesar(r,18)},value)value3:=strings.Map(func(rrune)rune{returncaesar(r,-18)},value2)fmt.Println(value2,value3)value4:=strings.Map(func(rrune)rune{returncaesar(r,1)},value)value5:=strings.Map(func(rrune)rune{returncaesar(r,-1)},value4)fmt.Println(value4,value5)value="exxegoexsrgi"result:=strings.Map(func(rrune)rune{returncaesar(r,-4)},value)fmt.Println(value,result)}运行顺序:testlwkltestuftutestexxegoexsrgiattackatonce6.总结本文档Single介绍了密码学中一个有趣的凯撒密码,是一种替代加密技术,并在Go代码中实现了该算法的加解密过程