现代密码学基础实验——多项式代码

现代密码学基础实验——多项式代码

1.实验内容
自选一种编程语言,实现古典密码中多项式代换密码的加解密过程。由于多项式代换密码可一般化移位密码、乘数密码、仿射密码,分别对多项式代换密码参数进行设置,完成这三个特例的实现。
多项式代换密码加密方程为:
f (l)=ktl t+kt-1l t-1+…+k1l +k0 mod q。
其中,kt, …, k0Zq,lZq。
2.实验理解
(1)因为移位密码,乘数密码,放射密码是特殊的多项式密码,根据多项式代码参数选择的不同而不同。
(2)定义两个不同的参数k1,k2来区别三个不同的密码类型,输入参数进行匹配
代码如下:

#include <stdio.h>
#include<stdlib.h>
#include<math.h>
int euclidean(int d, int f);
#define MAX 100
void choose1()//首界面操作选择函数
{
	int test = 1;
	while (test)
	{
		int k1 = 0;
		int k2 = 0;
		printf("请输入k1,k2的值\n");
		scanf_s("%d %d", &k1, &k2);//输入不同的参数
		if (k1 == 0 && k2 != 0)
		{

			printf("调用移位密码函数");
			printf("\n请输入操作序号(1:加密  2:解密  0:退出):\n");
			int n;
			
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.古典密码算法之 替代算法 import java.io.*; public class Caesar { //向右加密方法 ming为明文 mi 为密文 yao为密钥 public static void encode(String ming, int yao) { String mi = ""; for(int i=0; i<ming.length(); i++){ if (ming.charAt(i) == 32) mi += (char)(32); else if (ming.charAt(i) >= 'a' && ming.charAt(i) <= 'z') mi += (char)('a' + ((ming.charAt(i) - 'a' + yao) % 26)); else if (ming.charAt(i) >= 'A' && ming.charAt(i) <= 'Z') mi += (char)('A' + ((ming.charAt(i) - 'A' + yao) % 26)); else if (ming.charAt(i) >= '0' && ming.charAt(i) <= '9') mi += (char)('0' + ((ming.charAt(i) - '0' + yao) % 10)); } System.out.println("密文为: " + mi); } /* * 2.古典密码算法之 置换算法 * */ public class Change { //当加密或者解密成功时返回CRYPT_OK,失败时返回CRYPT_ERROR private final static int CRYPT_OK = 1; private final static int CRYPT_ERROR = 0; /* * @param initCode 没有加密前的字符串 * @CRYPT_OK 加密成功 * @CRYPT_ERROR 加密失败 */ public static int encrypt(String initCode) throws Exception{ //用来输出加密后的字符 StringBuilder sb = new StringBuilder(); //获取initCode的字符串长度 int codeLength = initCode.length(); //根据这个codeLength来确定要几行6列 int rows = (int)Math.ceil(codeLength/6.0 ); //构造一个rows行6列的数组 char[][] initChar = new char[rows][6]; //存放initCode中的所有字符,包括空格 for(int i = 0; i < initChar.length; i++ ) for(int j=0; j < initChar[0].length; j++){ //将对应字符放入这个数组中 try{ initChar[i][j] = initCode.charAt( (i ) * initChar[0].length + j ); }catch(Exception e){

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值