最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

密码学

运维笔记admin26浏览0评论

密码学

密码学

CFB算法

密码算法可以分为分组密码和流密码两种,之前所学的DES,3DES和AES都是分组密码。CFB和OFB都是流密码,而CFB和OFB使用方法也基本相同,所以只以CFB进行讲解:

package main//通过CFB模式进行AES加密
import ("crypto/aes""io""crypto/rand""crypto/cipher""fmt"
)//加密
func AESEncrypt(plaintext, key []byte) []byte {//分组秘钥block, _ := aes.NewCipher(key)//创建数组,存放加密后的密文ciphertext := make([]byte, aes.BlockSize+len(plaintext))//设置内存空间可读iv := ciphertext[:aes.BlockSize]io.ReadFull(rand.Reader, iv)//设置加密方式stream := cipher.NewCFBEncrypter(block, iv)//加密(利用ciphertext[aes.BlockSize:]与plaintext做异或)stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext)return ciphertext
}//解密
func AesDecrypt(ciphertext, key []byte) []byte {block, _ := aes.NewCipher(key)iv := ciphertext[:aes.BlockSize]ciphertext = ciphertext[aes.BlockSize:]//设置解密方式stream := cipher.NewCFBDecrypter(block, iv)//解密stream.XORKeyStream(ciphertext, ciphertext)return ciphertext
}
func main() {encryptcode := AESEncrypt([]byte("sanyang"), []byte("123456789abcdefg"))fmt.Printf("%x\n", encryptcode)decryptcode := AesDecrypt(encryptcode, []byte("123456789abcdefg"))fmt.Println(string(decryptcode))//fmt.Println(base64.StdEncoding.EncodeToString(decryptcode))
}
发布评论

评论列表(0)

  1. 暂无评论