密码学编程问题与解决方案
1. 密码学基础术语
在密码学中,有几个基本术语需要了解:
- 密钥(Key) :用于加密和解密消息的秘密信息。有时密码本身就是密钥,有时密码用于生成适合特定加密算法使用格式的密钥。
- 明文(Plaintext) :未加密的消息。
- 密文(Ciphertext) :明文加密后的版本。
传统上,对于一些较旧的加密系统,如凯撒替换和维吉尼亚密码,明文和密文以五个大写字母为一组书写,不包含标点符号和空格。例如,消息 “This is the secret message” 的明文表示为 “THISI STHES ECRET MESSA GE”,加密后可能为 “WKLVL VWKHV HFUHW PHVVD JH”。这种五个字母的组被称为五字母组(Five - grams)。而现代系统则对字节流进行加密和解密,这些字节流可以包含各种内容,如图像、文档和数据库,在这些系统中,用五字母组表示消息意义不大。
在编写密码学程序时,大部分示例解决方案使用 .NET Framework 的密码学命名空间,可在代码文件中添加以下 using
指令:
using System.Security.Cryptography;
2. 密码学编程问题
2.1 凯撒密码(Caesar cipher)
在凯撒密码中,也称为凯撒移位、凯撒替换密码或移位