Skip to content

Latest commit

 

History

History
79 lines (41 loc) · 6.48 KB

File metadata and controls

79 lines (41 loc) · 6.48 KB

十一、密码系统

问题

88.凯撒密码

编写一个程序,可以使用带有右旋转和任意移位值的凯撒密码来加密和解密消息。为了简单起见,程序应该只考虑大写的文本消息,只编码字母,忽略数字、符号和其他类型的字符。

89.Vigenère 密码

编写一个程序,可以使用 Vigenère 密码对消息进行加密和解密。为简单起见,输入的加密纯文本消息应该仅由大写字母组成。

90.Base64 编码和解码

编写一个可以使用 base64 编码方案对二进制数据进行编码和解码的程序。你必须自己实现编码和解码功能,不要使用 3 rd 方库。用于编码的表格应该是 MIME 规范中的表格。

91.正在验证用户凭据

编写一个程序,模拟用户向安全系统进行身份验证的方式。要登录,用户必须已经在系统中注册。用户输入用户名和密码,程序检查是否匹配其注册用户;如果是,则授予用户访问权限,否则操作失败。出于安全原因,系统不得记录密码,而是使用 SHA 哈希。

92.计算文件哈希

编写一个程序,在给定文件路径的情况下,计算并向控制台打印文件内容的 SHA1、SHA256 和 MD5 哈希值。

93.加密和解密文件

编写一个可以使用高级加密标准 ( AESRijndael )加密和解密文件的程序。应该可以指定源文件和目标文件路径以及密码。

94.文件签名

使用 RSA 加密技术,编写一个能够对文件进行签名并验证签名文件未被篡改的程序。签署文件时,签名应写入单独的文件,并在以后用于验证过程。程序应至少提供两个功能:一个是对文件进行签名(将文件的路径、RSA 私钥的路径和签名将被写入的文件的路径作为参数),另一个是验证文件(将文件的路径、RSA 公钥的路径和签名文件的路径作为参数)。

解决方法

88.凯撒密码

一种凯撒密码,也称为凯撒密码凯撒密码凯撒移位移位密码,是一种非常古老、简单且广为人知的加密技术,它将纯文本中的每个字母替换为字母表中某个固定位置的字母。这种方法被凯撒大帝用来保护具有军事重要性的信息。他使用了三个字母的移位,因此用 D 代替 A,用 E 代替 B,等等。在这种编码中,文本 CPPCHALLENGER 成为 FSSFKDOOHQJHU。密码在维基百科https://en.wikipedia.org/wiki/Caesar_cipher有详细描述。

Although the Caesar cipher has no place in modern cryptography since it is trivial to break, it is still used on online forums or newsgroups ...

89.Vigenère 密码

Vigenère 密码是一种加密技术,使用一系列交织的凯撒密码。虽然在 1553 年由乔凡·巴蒂斯塔·巴拉索描述,但它在 19 世纪被错误地归因于布莱斯·德·维根内,最终以他的名字命名。密码在维基百科https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher有详细描述。这里只做一个简短的总结。

Although the Vigenère cipher took three centuries to be broken, it is nowadays trivial to break, just as in the case of the Caesar cipher, on which it is based. Like the previous problem, this one is proposed only as a fun and simple exercise and not as an argument in favor of using this cipher for cryptographic purposes.

技术...

90.Base64 编码和解码

Base64 是一种编码方案,用于使用 64 个字符的字母表以 ASCII 格式表示二进制数据。虽然所有实现都使用相同的前 62 个字符(A-Za-z0-9,但最后两个值可能不同。符号+/在 MIME 规范中使用。base64 数字代表 6 位数据,四个 base64 数字正好编码三个字节(8 位)的二进制数据。当位数不能被 3 整除时,在转换为 base64 之前会添加额外的零字节。用===填充编码文本可用于指示来自普通数据的三个字节的最终组实际上只包含一个或两个字节。

这是一个编码的例子...

91.正在验证用户凭据

加密方案的免费跨平台 C++ 库的一个好选择是 Crypto++。该库广泛用于非商业和商业项目,以及学术界、学生项目和其他项目,因为其加密功能的行业经验证的实现。该库支持 AES 和 AES 候选项,以及其他分组密码、消息认证码、哈希函数、公钥加密和许多其他功能,包括非加密功能,如伪随机数生成器、素数生成和验证、DEFLATE 压缩/解压缩、编码方案、校验和函数等。图书馆位于...

92.计算文件哈希

文件哈希通常用于确保内容的完整性,例如在从网络下载文件的情况下。虽然 SHA1 和 MD5 散列函数的实现可以在各种库中找到,但是我们将再次使用 Crypto++ 库。如果您没有遵循前面的问题及其解决方案验证用户凭据,您应该在继续此问题之前这样做,因为这里给出的关于 Crypto++ 库的一般信息将不再重复。

使用 Crypto++ 库计算文件的散列相对简单。下面的代码使用了几个组件:

  • FileSource,允许使用BufferedTransformation从文件中读取数据。默认情况下,...

93.加密和解密文件

为了使用 Crypto++ 库解决这个问题,我们需要使用几个组件:

  • FileSource,允许使用BufferedTransformation从文件中读取数据。默认情况下,它以 4,096 字节的块或块的形式抽取数据,尽管手动抽取也是可能的。
  • FileSink,允许你使用BufferedTransformation将数据写入文件。它是一个FileSource源对象的伴宿对象。
  • DefaultEncryptorWithMACDefaultDecryptorWithMAC,使用认证标签对字符串和文件进行加密和解密,以检测篡改。他们使用 AES 作为默认分组密码,SHA256 作为 MAC 的默认哈希。每次运行这两个类都会产生不同的...

94.文件签名

签名和验证的过程类似于加密和解密,尽管在基本方式上有所不同;加密使用公钥完成,解密使用私钥完成,而签名使用私钥完成,验证使用公钥完成。签名有助于拥有公钥的收件人通过使用签名及其公钥来验证文件未被修改。但是,拥有公钥不足以更改文件并再次签名。Crypto++ 库也用于解决这个问题。

虽然您可以使用任意一对公钥-私钥 RSA 来执行签名和验证,但是在这里提供的实现中,密钥是在以下情况下随机生成的...