【网络安全】【密码学】【北京航空航天大学】实验五、古典密码(中)【C语言实现】

这篇具有很好参考价值的文章主要介绍了【网络安全】【密码学】【北京航空航天大学】实验五、古典密码(中)【C语言实现】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验五、古典密码(中)

实验目的原理简介参见博客:古典密码(上)

一、实验内容

1、弗纳姆密码(Vernam Cipher)

(1)、算法原理

加密原理:
加密过程可以用方程 ci = pi (+) ki 表示,其中 pi 是明文第 i 个二进制位,ki 是密钥第 i 个二进制位,ci 是密文第 i 个二进制位,(+)异或运算符。密文是通过对明文和密钥的逐位异或而成的。

解密原理:
根据异或运算的性质,解密过程可以用方程 pi = ci (+) ki 表示,其中 pi 是明文第 i 个二进制位,ki 是密钥第 i 个二进制位,ci 是密文第i个二进制位,(+) 是异或运算符。

(2)、算法的代码实现(C语言)

使用文件进行读/写,而非从终端中直接输入明/密文。(此程序存在bug,正在修复中)

#include <stdio.h>
#include <string.h>

char plaintext[10010] = { 0 };  // 明文
char ciphertext[10010] = { 0 };  // 密文

char key[10010] = { 0 };  // 密钥

void encrypt(char plaintext[], char key[]);  // 加密函数
void decrypt(char ciphertext[], char key[]);  // 解密函数

int main()
{
	char a;
	int i = 0;
	
	printf("该程序实现弗纳姆密码。请输入密钥:\n");
	gets(key);
	
	
	int input;
	printf("请输入选项:1为加密;2为解密\n");
	scanf("%d", &input);
	
	if(input == 1)
	{
		// 加密
		printf("******加密中******\n\n");
		encrypt(plaintext, key);
		printf("******加密完成******\n");
	}
	
	else if(input == 2)
	{
		// 解密
		printf("******解密中******\n\n");
		decrypt(ciphertext, key);
		printf("******解密完成******\n");
	}
	
	else
		printf("错误的选项(只能为1或2)。程序退出。");
	
	return 0;
}

void encrypt(char plaintext[], char key[])
{
	FILE *in, *out;
	in = fopen("input1.txt", "r");
	out = fopen("output1.txt", "w");
	char a;
	int i;
	int j;
	while((a = fgetc(in)) != EOF)
	{
		plaintext[i ++] = a;
	}
	for(j = 0;j < i;j ++)
	{
		ciphertext[j] = plaintext[j] ^ key[j % strlen(key)];
	}
	fputs(ciphertext, out);
	fclose(in);
	fclose(out);
	return;
}

void decrypt(char ciphertext[], char key[])
{
	FILE *in, *out;
	in = fopen("input2.txt", "r");
	out = fopen("output2.txt", "w");
	char a;
	int i;
	int j;
	while((a = fgetc(in)) != EOF)
	{
		ciphertext[i ++] = a;
	}
	for(j = 0;j < i;j ++)
	{
		plaintext[j] = ciphertext[j] ^ key[j % strlen(key)];
	}
	fputs(plaintext, out);
	fclose(in);
	fclose(out);
	return;	
}

(3)、算法测试

加密过程演示:

明文:(位于input1.txt中):

Here lies a toppled god - His fall was not a small one. We did but build his pedestal, A narrow and a tall one. - Tleilaxu Epigram

(语出弗兰克·赫伯特 Frank Herbert 的《沙丘:救世主 Dune: Messiah》,简单翻译过来是:这里躺着一个被推翻的神明——他轰然倒下。我们未曾有他助——只是将他供奉起来,让他如履薄冰。)

密钥:crucible (考验)

(插一句,借鉴(特别是二战)历史和经典谍战电影,双方在加密通信时使用某本书中约定好的某个单词,这里crucible是《沙丘:救世主》(原)书第125页的第1个单词。)

密文:(位于output1.txt中,为非打印(可见)字符。)

运行截图:

【网络安全】【密码学】【北京航空航天大学】实验五、古典密码(中)【C语言实现】,C语言,算法,密码学,web安全,密码学,c语言

解密过程演示(恢复明文):

密文:(位于input2.txt中,内容为加密后的输出)

密钥:crucible(和加密过程所用密钥相同)

明文:(位于output2.txt中):

Here lies a toppled god - His fall was not a small one. We did but build his pedestal, A narrow and a tall one. - Tleilaxu Epigram

运行截图:

【网络安全】【密码学】【北京航空航天大学】实验五、古典密码(中)【C语言实现】,C语言,算法,密码学,web安全,密码学,c语言

2、栅栏密码(Fence Cipher)

(1)、算法原理

加密原理:
栅栏密码按照列的顺序将明文(去掉空格)写入m行n列的数组,按照行的顺序将字符重新组合得到密文,这种方式称为m栏栅栏密码。

解密原理:
首先将密文分成n组,n为数组的行数,然后按照列的顺序将密文进行重新组合,最后将组合后的字符拼接起来,得到密文。

直观举例

明文
One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them…

(语出J.R.R. 托尔金魔戒 The Lord of the Rings》卷首,拙劣翻译为:一戒统御众人,一戒寻其踪迹,一戒召其而来,将其束于黑暗。)

首先去掉标点,变成:
OneRingtorulethemallOneRingtofindthemOneRingtobringthemallandinthedarknessbindthem,一个长“单词”,共82个字母:

【网络安全】【密码学】【北京航空航天大学】实验五、古典密码(中)【C语言实现】,C语言,算法,密码学,web安全,密码学,c语言

写成一个10行9列(多余2个字母)的矩阵,竖读为明文,横读为密文:

【网络安全】【密码学】【北京航空航天大学】实验五、古典密码(中)【C语言实现】,C语言,算法,密码学,web安全,密码学,c语言

(2)、算法的代码实现(C语言)

#include <stdio.h>
#include <string.h>

char plaintext[10010] = { 0 };
char ciphertext[10010] = { 0 };
char table[10010][10010] = { '*' };

void encrypt(char plaintext[], int n);
void decrypt(char ciphertext[], int n);

int n;  //行数 
int i, j, k;
int a, b; //len = a * n + b
int len;  //明文、密文的长度 

int main()
{	
	int input;
	printf("该程序实现栅栏密码。请输入选项:1为加密;2为解密\n");
	scanf("%d", &input);
	
	if(input == 1)
	{
		// 加密
		printf("请输入要加密的明文:\n");
		scanf("%s", plaintext);
		printf("请输入行数:\n");
		scanf("%d", &n);
		printf("加密结果:\n");
		encrypt(plaintext, n);
	}
	
	else if(input == 2)
	{
		// 解密
		printf("请输入要解密的密文:\n");
		scanf("%s", ciphertext);
		printf("请输入行数:\n");
		scanf("%d", &n);
		printf("解密结果:\n");
		decrypt(ciphertext, n);
	}
	
	else
		printf("错误的选项(只能为1或2)。程序退出。");
	
	return 0;
}

void encrypt(char plaintext[], int n)
{
	for(j = 0;j < n;j ++)
	{
		for(i = 0;i < strlen(plaintext);i ++)
		{
		    if(i % n == j)
			{
		    	putchar(plaintext[i]);
			}
		}
	}
	return;
}

void decrypt(char ciphertext[], int n)
{
	k = 0;
	len = strlen(ciphertext);
	a = len / n;
	b = len - a * n;
	//printf("%d %d", a, b);
	for(i = 0;i < b;i ++)
	{
		for(j = 0;j < a + 1;j ++)
		{
			table[i][j] = ciphertext[k ++];
		}
	}
	for(i = b;i < n;i ++)
	{
		for(j = 0;j < a;j ++)
		{
			table[i][j] = ciphertext[k ++];
		}
	}
	for(j = 0;j < a;j ++)
	{
		for(i = 0;i < n;i ++)
		{
			putchar(table[i][j]);
		}
	}
	for(i = 0;i < b;i ++)
	{
		putchar(table[i][a]);
	}
	return;
}

(3)、算法测试

使用上述例子中的明文进行测试,n(行数)为10.

加密过程:

【网络安全】【密码学】【北京航空航天大学】实验五、古典密码(中)【C语言实现】,C语言,算法,密码学,web安全,密码学,c语言

解密过程:

【网络安全】【密码学】【北京航空航天大学】实验五、古典密码(中)【C语言实现】,C语言,算法,密码学,web安全,密码学,c语言

成功恢复出明文。

二、参考文献

1、《密码编码学与网络安全——原理与实践(第七版)》(Cryptography and Network Security, Principles and Practice, Seventh Edition),【美】威廉 斯托林斯 William Stallings 著,王后珍等 译,北京,电子工业出版社,2017年12月。

2、《密码学实验教程》,郭华 刘建伟等 主编,北京,电子工业出版社,2021年1月。文章来源地址https://www.toymoban.com/news/detail-812639.html

到了这里,关于【网络安全】【密码学】【北京航空航天大学】实验五、古典密码(中)【C语言实现】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【北京航空航天大学】【信息网络安全实验】【实验一、密码学:DES+RSA+MD5编程实验】

    1. 通过对DES算法的代码编写,了解分组密码算法的设计思想和分组密码算法工作模式; 2. 掌握RSA算法的基本原理以及素数判定中的Rabin-Miller测试原理、Montgomery快速模乘(模幂)算法,了解公钥加密体制的优缺点及其常见应用方式; 3. 掌握MD5算法的基本原理,了解其主要应用

    2024年02月19日
    浏览(52)
  • 网络安全密码学

    目录 一 古代密码学 1.替换法 2.移位法 3.古典密码学的破解方式 二 近代密码学 三 现代密码学 1.散列函数(哈希函数) 2.对称加密 3.非对称加密 四 如何设置密码才安全 1.密码不要太常见 2.各个应用软件里面的密码不要设置一样 3.在设置密码的时候,可以加一些特殊的标记 实

    2023年04月12日
    浏览(49)
  • 网络安全之密码学

    目录 密码学 定义 密码的分类 对称加密 非对称加密 对称算法与非对称算法的优缺点 最佳解决办法 --- 用非对称加密算法加密对称加密算法的密钥 非对称加密如何解决对称加密的困境 密钥传输风险 密码管理难 常见算法 对称算法 非对称算法 完整性与身份认证最佳解决方案

    2024年02月01日
    浏览(76)
  • 网络安全与密码学

    1、网络安全威胁 破坏网络安全的一些理论方式: 窃听:窃听信息,在网路通信双方直接进行窃听。 插入:主动在网络连接中插入信息(可以在message中插入恶意信息) 假冒:伪造(spoof)分组中的源地址,假冒客户端或服务器。 劫持:通过移除/取代发送方发或接收方“接管

    2024年02月16日
    浏览(45)
  • 网络安全:密码学基本理论.

    密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学. 目录 网络安全:密码学基本理论. 密码学基本概念: 密码安全性分析: 密码体系分析:

    2024年02月16日
    浏览(38)
  • 【网络安全】1.4 密码学基础

    密码学是网络安全的核心组成部分,它帮助我们保护信息,防止未经授权的访问。在这篇文章中,我们将从基础开始,深入了解密码学的基本概念和原理,包括加密、解密、密钥、哈希函数等。我们将尽可能使用简单的语言和实例,以便于初学者理解。 密码学是一门研究信息

    2024年02月07日
    浏览(43)
  • 计算机网络安全——密码学入门

            网络安全是指在网络领域、专业领域的网络安全包括在基础计算机网络基础设施中所做的规定,网络管理员采取的策略来保护网络及网络可访问资源免受未经授权的访问,以及对其有效性(或缺乏)的持续不断的监控和测量的结合。 1.1.1 保密性         只有授

    2024年01月19日
    浏览(53)
  • 密码学的社会网络:如何保护社交网络的安全

    社交网络已经成为了现代人们生活中不可或缺的一部分,它们为我们提供了一种与家人、朋友和同事保持联系的方式。然而,这种联系也带来了一些挑战,因为社交网络上的数据经常被盗、篡改或泄露。因此,保护社交网络的安全至关重要。 在这篇文章中,我们将探讨密码学

    2024年02月20日
    浏览(63)
  • 《计算机系统与网络安全》 第四章 密码学基础

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月11日
    浏览(49)
  • 【网络与信息安全学报】区块链密码学隐私保护技术综述——CCF T2

    区块链密码学隐私保护技术综述 Survey on blockchain privacy protection techniques in cryptography Abstract 近年来,数据隐私问题日益明显,如何在区块链中实现有效的隐私保护是研究热点。针对区块链在隐私保护上的研究现状与发展态势,阐述了区块链在交易地址、预言机以及智能合约上

    2024年02月03日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包