#加密解密 #加密 #凯撒 #加密

nightly bin+lib cifra

使用经典方法加密和解密文本的控制台命令

10 个不稳定版本

0.9.3+post32021年12月15日
0.9.3+post22021年12月9日
0.9.3+post12021年12月8日
0.9.2+post72021年11月7日
0.9.1 2021年10月22日

#1626 in 密码学

BSD-3-Clause

750KB
4.5K SLoC

Crate GitHub release (latest by date) License GitHub Workflow Status (branch) GitHub issues GitHub commit activity GitHub last commit Debian repository

名称

cifra — 使用经典方法加密和解密文本的库和命令行工具。

摘要

| $ cifra 模式 [-h | --help ]

描述

cifra 是一个控制台命令和 Python 库,用于使用经典方法加密和解密文本。它还执行对这些方法的密码攻击。

我在阅读 Al Sweigart 的《用 Python 破解密码》时实现了这个功能。在这个过程中,我还开发了另一个 Python 实现,以评估 Python 和 Rust 之间的实现差异。两个实现的架构几乎相同,因此比较两种实现的功能可以了解如何在 Python 和 Rust 中表达相同的东西。

一些结论是显而易见的:Python 是一种非常灵活的语言,可以只用几行代码实现 Rust 需要更多行代码实现的功能;另一方面,Rust 的性能非常出色,可以比 Python 快得多地执行相同的计算。然而,我发现了一个非常有用的结论:Python 是 Rust 的优秀原型设计语言,除了反射主题之外,Python 中可以做的绝大多数事情都可以轻松地在 Rust 中实现。

请注意,加密操作本身很慢。Cifra 在完成工作之前不会返回任何视觉反馈,因此如果您运行一个命令并且它长时间等待,不要认为它卡住了并完成执行,命令可能只是在默默地执行计算。请耐心等待,最终命令将返回结果。

模式

字典

管理字典以执行密码攻击。

| $ cifra dictionary ACTION

可能的操作

  • 创建:创建一个唯一单词的字典。

    | $ cifra dictionary create NEW_DICTIONARY_NAME

    • 位置参数
      • NEW_DICTIONARY_NAME:要创建的字典的名称。
    • 可选参数
      • -i PATH_TO FILE_WITH_WORDS | --initial_words_file PATH_TO FILE_WITH_WORDS:可以加载位于文件中的词典单词。文件可以是普通文本文件,如书籍。冗余单词在摄入过程中被忽略。
  • delete:删除现有词典。

    | $ cifra dictionary delete DICTIONARY_NAME_TO_DELETE

    • 位置参数
      • DICTIONARY_NAME_TO_DELETE:要删除的词典的名称。
  • update:向现有词典添加单词。

    | $ cifra dictionary update DICTIONARY_NAME_TO_UPDATE PATH_TO_FILE_WITH_WORDS

    • 位置参数
      • DICTIONARY_NAME_TO_UPDATE:要更新以添加额外单词的词典的名称。
      • PATH_TO_FILE_WITH_WORDS:要添加到词典中的单词的文件的路径名。文件可以是普通文本文件,如书籍。冗余单词在摄入过程中被忽略。
  • list:显示现有词典。

    | $ cifra dictionary list

密码学

使用密钥加密文本。

| $ cifra cipher ALGORITHM_NAME CIPHERING_KEY FILE_TO_CIPHER

  • 位置参数

    • ALGORITHM_NAME:用于加密的算法。
    • CIPHERING_KEY:用于加密的密钥。
    • FILE_TO_CIPHER:包含要加密文本的文件的路径。
  • 可选参数

    • -o OUTPUT_CIPHERED_FILE, --ciphered_file OUTPUT_CIPHERED_FILE:放置加密文本的输出文件路径。如果不使用,则加密文本将输出到控制台。
    • -c CHARSET, --charset CHARSET:默认字符集是 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgh ijklmnopqrstuvwxyz1234567890 !?.,但您可以在此处设置另一个。

解密

使用密钥解密文本。

| $ cifra decipher ALGORITHM_NAME CIPHERING_KEY FILE_TO_DECIPHER

  • 位置参数

    • ALGORITHM_NAME:用于加密的算法。
    • CIPHERING_KEY:用于加密的密钥。
    • FILE_TO_CIPHER:包含要加密文本的文件的路径。
  • 可选参数

    • -o OUTPUT_CIPHERED_FILE, --ciphered_file OUTPUT_CIPHERED_FILE:放置加密文本的输出文件路径。如果不使用,则解密文本将输出到控制台。
    • -c CHARSET, --charset CHARSET:默认字符集是: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgh ijklmnopqrstuvwxyz1234567890 !?.,但您可以在此处设置另一个。

攻击

攻击加密文本以获取其明文。

| $ cifra attack ALGORITHM_NAME FILE_TO_ATTACK

  • 位置参数

    • ALGORITHM_NAME:要攻击的算法。
    • FILE_TO_ATTACK:包含要攻击文本的文件的路径。
  • 可选参数

    • -o OUTPUT_CIPHERED_FILE, --ciphered_file OUTPUT_CIPHERED_FILE:放置解密文本的输出文件路径。如果不使用,则解密文本将输出到控制台。
    • -k, --output_recovered_key:包括猜测的密钥在输出中。如果不使用,则仅输出恢复的文本。
    • -c CHARSET, --charset CHARSET:默认字符集是: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgh ijklmnopqrstuvwxyz1234567890 !?.,但您可以在此处设置另一个。

算法

目前这些算法可用

  • caesar
  • substitution
  • transposition
  • affine
  • vigenere

BUGS

在: https://github.com/dante-signal31/cifra-rust/issues 报告问题

安装

要安装Cifra,请参阅其安装说明: https://github.com/dante-signal31/cifra/wiki/Installation

AUTHOR

Dante Signal31 [email protected]

SEE ALSO

网站: https://github.com/dante-signal31/cifra-rust

SUPPORTERS

Private NPM registry and Maven, RPM, DEB, PyPi and RubyGem Repository · packagecloud

COPYRIGHT

版权所有 (c) 2021 Dante-Signal31 [email protected]。保留所有权利。

允许以源代码和二进制形式重新分发和使用,无论是否修改,只要满足以下条件:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or
promote products derived from this software without specific prior written permission.

本软件由版权所有者和贡献者提供“原样”且不提供任何明示或暗示的保证,包括但不限于适销性和特定用途的适用性保证。在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、示范性或后果性的损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论损害是由何种原因引起的,以及基于何种责任理论,即使被告知此类损害的可能性。

依赖项

~35MB
~654K SLoC