对称加密的问题:

背景:
Alice 向 Bob说, 你好!

对称加密:password

A:你好 =》 加密 =》 *&*……*(……TUGG =====》 传输

B:密文( *&*……*(……TUGG =====》) =》 解密 =》 你好!!

++++++++++++++++++++++

假如A发的消息就是不可读(&*……%¥¥……&*&%¥#@) 加密,解密

B收到密文后解密:(&*……%¥¥……&*&%¥#@)

问题:B解出来的是乱码,B无法判断这个消息就是A发的原文!!

解决办法:引入消息认证码

func main() {

	src := []byte("不是一番寒彻骨,哪得梅花扑鼻香!!! 123456734523452345")
	key := []byte("1234567887654321")

	cipherData := aesCTREncrypt(src, key)

	fmt.Printf("cipherData : %x\n", cipherData)

	fmt.Printf("+++++++++++++++++++++++++\n")

	cipherData = append(cipherData, []byte("hello")...)

	plainText := aesCTRDecrypt(cipherData, key)
	fmt.Printf("plainText : %x\n", plainText)
}

密文被改变,依然可以解出数据,但是不知道数据是否可靠
明文: 不是一番寒彻骨,哪得梅花扑鼻香!!! 123456734523452345
aes block size : 16
cipherData : d8d1cfb975e7c16451a9d7fda95ea6782cc5133d42c19e3f63cb4d82e494889eac4b756e0b427b263a07a527811c16b80f3d49a4240b66fb6ae21afffa114c5e8a17f9fa
+++++++++++++++++++++++++
plainText : e4b88de698afe4b880e795aae5af92e5bdbbe9aaa8efbc8ce593aae5be97e6a285e88ab1e68991e9bcbbe9a699212121203132333435367333435323334353233343509e9364ebf0b