密码学实验题_03.3_AES实验_【Rijndael-GF】和【GF(2^8)上的本源多项式】等(基于Sage)
个人关于【3. AES实验】的思考理解(基于Sage的Python源码)
目录:
内容 1) 利用Rijndael-GF完成AES的加解密操作(参考Sage Reference中的Rijndael-GF)
内容 2) (思考题)用Sage构建一个具有256个元素的有限域,令“a”表示生成元,且该有限域的不可约多项式为“a^8 + a^4 + a^3 + a + 1”。(注:默认构建的GF(2^8)对应的不可约多项式不是该多项式,可检测)。
3. AES实验
1)利用Rijndael-GF完成AES的加解密操作(参考Sage Reference中的Rijndael-GF)
# 利用Rijndael-GF完成AES的加解密操作
from sage.crypto.mq.rijndael_gf import RijndaelGF
aes_rgf = RijndaelGF(4, 4)
print(aes_rgf)
# Sage Reference里面的例子:
# http://0.0.0.0:6667/kernelspecs/sagemath/doc/reference/cryptography/sage/crypto/mq/rijndael_gf.html
text_plain = '3243f6a8885a308d313198a2e0370734'
print("明文(16字节,4*4矩阵):", end="")
print(text_plain)
key = '2b7e151628aed2a6abf7158809cf4f3c'
print("密钥(16字节,4*4矩阵):", end="")
print(key)
text_expected_ciphertext = '3925841d02dc09fbdc118597196a0b32'
# AES加密
text_cipher = aes_rgf.encrypt(text_plain, key)
print("密文(16字节):", end="")
print(text_cipher)
# AES解密
text_decrypt_output = aes_rgf.decrypt(text_cipher, key)
print("再次解密后的输出:", end="")
print(text_decrypt_output)
# 《密码编码学与网络安全——原理与实践(第7版,威廉·斯托林斯)》的 P124页的 AES例子
text_P124_plain = '0123456789abcdeffedcba9876543210'
print("明文(P124页的AES例子): ", end="")
print(text_P124_plain)
text_P124_key = '0f1571c947d9e8590cb7add6af7f6798'
print("密钥(P124页的AES例子): ", end="")
print(text_P124_key)
# 加密:
text_P124_cipher = aes_rgf.encrypt(text_P124_plain, text_P124_key)
print("加密后的密文(P124页的AES例子): ", end="")
print(text_P124_cipher)
print("结果与P124页上相同!")
print("另外,邀请大家继续看【★《The Design of Rijndael:AES — The Advanced Encryption Standard》电子书2002.pdf】的P230例子")
# ★《The Design of Rijndael:AES — The Advanced Encryptio