
密码学原理
ITTTTJH
学习一个东西最好的办法是想办法把他教给别人
展开
-
密码学课设 中国剩余定理 Hust
题目#include <stdio.h>#include <gmp.h>#include <iostream> #include<time.h> #include<stdlib.h>#define MAX 1<<16using namespace std;int test_num[] = { 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71原创 2020-09-29 10:54:46 · 827 阅读 · 1 评论 -
密码学课设 RSA参数计算 Hust
题目个人见解这题其实很简单,但是加了几个条件就变难了,首先如果p,q,e组成的RSA加密太弱了的话算错(我也感觉很迷惑,安全性弱也不能算错吧…),所以除了验算这几个参数之间的关系是否正确之外还要验证他们的安全性,即容不容易被破解。e不能太小,很容易理解,e的值越大,计算的难度越高嘛,但是什么样算大什么样算小这就很…感性(?)了。不过根据这道题所有检测数据点的输入来看,只要比65536大就可以了。p和q不能间隔太小,更不能相等(废话)。但是什么样算小呢,这个如果不听老师的话自己测的话,只能自己慢慢原创 2020-09-29 10:54:38 · 1731 阅读 · 0 评论 -
密码学课设 模重复平方 Hust
题目代码这题非常简单,没什么好说的,唯一要注意的就是mpz_t存储的数都大的吓人,递归甚至是普通的循环都是行不通的(爆栈或超时),要尽量减少循环次数,最好是指数性的减少。void expmod(mpz_t e, mpz_t m, mpz_t N, mpz_t b){ mpz_t i, r, result; mpz_init(i); mpz_init(r); mpz_init(result); mpz_set(i, e); mpz_set_ui(result, 1);原创 2020-09-29 10:54:31 · 773 阅读 · 0 评论 -
密码学课设 SPN增强 Hust
题目如图个人见解这题就如字面意思,就是SPN加密的加强版。加强的方式无非就是改变密钥长度,改变S盒的加密方式,增加加密轮数等等…因为这次加密的明文很长,所以我一次加密64位,S盒和P盒的内容也要随之改变了。我的主要改变方法就是S盒的加密方法改变,由书上的s[16]改成了s[16][16]置换,其实还可以改进一下,就是让每一轮加密的S[16][16]内容都不相同,但是已经可以过系统的检测了就懒得再改了。P盒由16长度变为了32长度。这题有一个坑就是他给的TIPS,不能用ECB工作模式,所以要用C原创 2020-09-29 10:54:24 · 1946 阅读 · 0 评论 -
密码学课设 线性逼近 Hust
书上的伪代码实现#include "stdio.h"#include "math.h"#define NUMBER 8000int p[20][20];int L1[8], L2[8], v[20], u[20];int s_1[16] = { 14,3,4,8,1,12,10,15,7,13,9,6,11,2,0,5 }; //S盒的逆void read(int* x){ char c; for (int num = 0; num < 4; num++) { scan原创 2020-09-29 10:54:15 · 1492 阅读 · 0 评论 -
密码学课设 SPN实现 Hust
这里写自定义目录标题题目要求未优化的代码,目前只能跑过k=5,再高就跑的太慢了应该是进制转换部分花了太多时间,想想怎么把他优化一下或者跳过这个过程,应该就可以过k=7了。题目要求Input第一行,一个正整数n,表示n组数据。接下来n行,每行包含两个用空格分开的16进制字符串。第一个字符串长度为8,表示32比特密钥key,第二个字符串长度为4,表示16比特明文。对1<=k<=6,第k个数据点点满足n = 10^k。对k=7,n = 4*10^6。TIPS: 需要快速读入Output原创 2020-09-08 08:58:35 · 2768 阅读 · 1 评论