单表置换密码

在单表置换密码中,密钥是由字母与空格组成的 如shana

在没有密钥作用前,置换表如下

abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ

在密钥的作用下,置换表将发生变化,具体如下

将密钥填入置换表,如果遇到重复的字符则忽略,接着按原表顺序填充,忽略重复字符,如下表

abcdefghijklmnopqrstuvwxyz
SHANBCDEFGIJKLMOPQRTUVWXYZ

首先将SHAN填入表中,因为A已经在前面出现,所以忽略,接着将除去S H A N四个字符的字母表按顺序填充


具体C语言代码实现如下,这个代码个人感觉写的不够简洁,以后有机会再修改

思路就是读取密钥后填充进空的置换表,然后 再把原字符表填充到置换表中构成密码表


#include <stdio.h>
#include <stdlib.h>

int main()
{
	//置换表
	char List[27] = { 0 };
	//字母表
	char Alpha[26] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
	//密钥
	char Key[101] = { 0 };
	//明文
	char Message[101] = { 0 };
	//密文
	char CipherText[101] = { 0 };
	int Num = 0;

	//获取密钥
	printf("请输入密钥(100字符以内): ");
	gets(Key);

	//构造置换表
	for (int i = 0; Key[i]; ++i)
	{
		if (Key[i] == ' ')
			continue;
		for (int j = 0; j < 26; ++j)
		{
			if (Alpha[j] == Key[i])
			{
				Alpha[j] = 0;
				List[Num++] = Key[i];
			}
		}
	}
	for (int i = 0; i < 26; ++i)
	{
		if (!Alpha[i])
			continue;
		List[Num++] = Alpha[i];
	}

	//获取明文
	printf("请输入明文(100字符以内): ");
	gets(Message);

	//加密
	for (int i = 0; Message[i]; ++i)
	{
		if (Message[i] == ' ')
			CipherText[i] = ' ';
		else
			CipherText[i] = List[Message[i] - 'a'];
	}

	//打印密文
	printf("加密后密文: %s\n", CipherText);

	system("PAUSE");
	return 0;
}


  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
单表置换密码是一种简单的加密方法,它通过将明文中的每个字母替换为密文表中对应的字母来加密。这里我们提供一个使用单表置换密码进行加密和解密的 Python 代码示例。 ```python import string def generate_cipher_key(shift): """ 生成密文表 """ upper_case = string.ascii_uppercase lower_case = string.ascii_lowercase shifted_upper_case = upper_case[shift:] + upper_case[:shift] shifted_lower_case = lower_case[shift:] + lower_case[:shift] cipher_key = str.maketrans(upper_case + lower_case, shifted_upper_case + shifted_lower_case) return cipher_key def encrypt(plaintext, shift): """ 加密明文 """ cipher_key = generate_cipher_key(shift) ciphertext = plaintext.translate(cipher_key) return ciphertext def decrypt(ciphertext, shift): """ 解密密文 """ cipher_key = generate_cipher_key(shift) plaintext = ciphertext.translate(cipher_key) return plaintext ``` 这里我们使用了 Python 内置的 `string` 模块来获取大小写字母,并通过 `str.maketrans()` 方法生成单表置换密码的密文表。`generate_cipher_key()` 函数接受一个整数参数 `shift`,表示字母需要向后移动的位数,从而生成不同的密文表。`encrypt()` 函数接受一个明文字符串和一个 `shift` 参数,返回加密后的密文字符串。`decrypt()` 函数接受一个密文字符串和一个 `shift` 参数,返回解密后的明文字符串。 下面是一个使用示例: ```python plaintext = "Hello, World!" shift = 3 ciphertext = encrypt(plaintext, shift) print(ciphertext) # "Khoor, Zruog!" decrypted_plaintext = decrypt(ciphertext, shift) print(decrypted_plaintext) # "Hello, World!" ``` 在这个例子中,我们将明文中的所有字母向后移动了 3 位,并得到了相应的密文。解密过程中,我们将密文中的所有字母向前移动 3 位,从而得到了原始的明文。需要注意的是,由于单表置换密码只是一种简单的加密方法,它的安全性非常有限,容易受到各种攻击。因此在实际应用中,需要使用更加复杂和安全的加密方法来保护敏感数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值