文档库 最新最全的文档下载
当前位置:文档库 › 密码学3DESC++实现

密码学3DESC++实现

密码学3DESC++实现
密码学3DESC++实现

JI A N G S U U N I V E R S I T Y 2017-2018学年第1学期

密码学课程设计

学院名称:计算机科学与通信工程学院

班级学号:

学生姓名:

指导老师:

一、实验要求:

问题描述:

编程实现3DES算法。从DES原理出发,设计3DES加解密过程;通过编程调试以实现3DES 算法;利用由学生本人的学号姓名等信息组成若干密钥,以及明文样本进行加解密测试;最后作总结。

要求:

(1)设计良好的交互界面,如要求用户输入密钥、明文字符串、得到相应的解密字符串等。

(2)程序设计,编写相应程序并调试。

(3)试用验证,记录每次操作过程和系统的结果。

(4)分析相应的问题。

(5)编写课程设计报告。

二、实验过程及分析:

算法简介:3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

算法介绍:3DES又称Triple DES,是DES加密算法的一种模式,它使用3条56位的密钥对数据进行三次加密。数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年被ANSI组织规范为ANSI X.3.92。DES使用56位密钥和密码块的方法,而在密码块的方法中,文本被分成64位大小的文本块然后再进行加密。比起最初的DES,3DES更为安全。

3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),加密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,M代表明文,C代表密文,这样:

3DES加密过程为:C=Ek3(Dk2(Ek1(M)))

3DES解密过程为:M=Dk1(EK2(Dk3(C)))

代码实现:我是先用C++将单重DES的算法编译出来,然后再进行三重DES算法,界面是利用MFC编写的一个简单的交互界面,实现对明文的加解密操作,主要的困难是在算法的编写上,在密文的输出形式上花费了许多时间,因为要实现三重加密,而每次明文的

输入都必须是字符数组的类型,而第二三次的明文是利用前一次的密文,所以所输出的密文也必须是字符数组类型,有些转换的小问题费了一些功夫;在实现界面的时候CString类型对char类型的数组转换也出了一些问题,不过实验了几个不同的方式还是成功的解决了类型转换的问题,之后就是简单的调用加解密函数进行操作就好了。

实验结果:

三、实验代码:

头文件des.h:

#include

#include

#include

#include

#include

using namespace std;

int IP_Table[64] = { //IP置换矩阵58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,

62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,

57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3,

61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7 };

int E_Table[48] = { //扩展矩阵32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9,

8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17,

16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25,

24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1 };

int P_Table[32] = { // P 盒16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10,

2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25 };

int IPR_Table[64] = { //逆IP置换矩阵40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31,

38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29,

36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27,

34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25 };

int PC1_Table[56] = { //密钥第一次置换矩阵57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18,

10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36,

63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22,

14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4 };

int PC2_Table[48] = { // 密钥第二次置换矩阵14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10,

23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2,

41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48,

44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32 };

int S_Box[8][4][16] = { //8个S盒三维数组

// S1

14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,

0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,

4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,

15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13,

// S2

15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,

3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,

0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,

13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9,

// S3

10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,

13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,

13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,

1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12,

// S4

7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,

13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,

10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14, // S5

2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3, // S6

12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13, // S7

4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12, // S8

13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 };

//把CHAR转换为INT

static void CharToBit(const char input[], int output[], int bits) { int i, j;

for (j = 0; j<8; j++) {

for (i = 0; i<8; i++) {

output[8 * j + 7 - i] = (input[j] >> i) & 1;

}

}

};

//把INT转换为CHAR

static void BitToChar(const int intput[], char output[], int bits) { int i, j;

for (j = 0; j<8; j++) {

for (i = 0; i<8; i++) {

output[j] = output[j] * 2 + intput[i + 8 * j];

}

}

};

//异或操作

static void Xor(int *INA, int *INB, int len) {

int i;

for (i = 0; i

*(INA + i) = *(INA + i) ^ *(INB + i);

}

};

//初始IP置换,64->64,左右分别32

static void IP(const int input[64], int output[64], int table[64]) { int i;

for (i = 0; i<64; i++) {

output[i] = input[table[i] - 1];//减1操作不可少!!

}

};

//E扩展32->48

static void E(const int input[32], int output[48], int table[48]) { int i;

for (i = 0; i<48; i++) {

output[i] = input[table[i] - 1];

}

};

//P置换,

static void P(const int input[32], int output[32], int table[32]) { int i;

for (i = 0; i<32; i++) {

output[i] = input[table[i] - 1];

}

};

//逆IP

static void IP_In(const int input[64], int output[64], int table[64]) { int i;

for (i = 0; i<64; i++) {

output[i] = input[table[i] - 1];

}

};

//PC_1,用于密钥置换

static void PC_1(const int input[64], int output[56], int table[56]) { int i;

for (i = 0; i<56; i++) {

output[i] = input[table[i] - 1];

}

};

//PC_2

static void PC_2(const int input[56], int output[48], int table[48]) { int i;

for (i = 0; i<48; i++) {

output[i] = input[table[i] - 1];

}

};

//S盒压缩

static void S(const int input[48], int output[32], int table[8][4][16]) {

int i = 0;

int j = 0;

int INT[8];

for (; i<48; i += 6) {

INT[j] = table[j][(input[i] << 1) + (input[i + 5])][(input[i + 1] << 3) + (input[i + 2] << 2) + (input[i + 3] << 1) + (input[i + 4])];

j++;

}

for (j = 0; j<8; j++) {

for (i = 0; i<4; i++) {

output[4 * j + 3 - i] = (INT[j] >> i) & 1;

}

}

};

//完成DES算法轮变换,就是f函数的内部实现,就是一个异或而已

static void F_func(int input[32], int output[32], int subkey[48]) {

int len = 48;

int temp[48] = { 0 };

int temp_1[32] = { 0 };

E(input, temp, E_Table);//32->48

Xor(temp, subkey, len);

S(temp, temp_1, S_Box);//48->32

P(temp_1, output, P_Table);//位数不变

};

//秘钥循环左移

static void RotateL(const int input[28], int output[28], int leftCount) {

int i;

int len = 28;//因为不是位运算,所以可以不用unsigned

for (i = 0; i

output[i] = input[(i + leftCount) % len];

}

};

//子密钥生成

static void subKey_fun(const int input[64], int Subkey[16][48]) {//注意输入和输出的位数,int只存放01,密钥为18位16轮

int loop = 1, loop_2 = 2;

int i, j;

int c[28], d[28];

int pc_1[56] = { 0 };

int pc_2[16][56] = { 0 };

int rotatel_c[16][28] = { 0 };

int rotatel_d[16][28] = { 0 };

PC_1(input, pc_1, PC1_Table);

for (i = 0; i<28; i++) {

c[i] = pc_1[i];//L

d[i] = pc_1[i + 28];//R

}

int leftCount = 0;

for (i = 1; i<17; i++) {

if (i == 1 || i == 2 || i == 9 || i == 16) {//左移一位

leftCount += loop;

RotateL(c, rotatel_c[i - 1], leftCount);

RotateL(d, rotatel_d[i - 1], leftCount);

}

else {//左移两位

leftCount += loop_2;

RotateL(c, rotatel_c[i - 1], leftCount);

RotateL(d, rotatel_d[i - 1], leftCount);

}

}

for (i = 0; i<16; i++) {

for (j = 0; j<28; j++) {

pc_2[i][j] = rotatel_c[i][j];

pc_2[i][j + 28] = rotatel_d[i][j];

}

}

for (i = 0; i<16; i++) {

PC_2(pc_2[i], Subkey[i], PC2_Table);

}

};

//加密实现

static void DES_Efun(char input[8], char key_in[8], int output[64]) {

int Ip[64] = { 0 };//存储初始置换后的矩阵

int output_1[64] = { 0 };

int subkeys[16][48];

int chartobit[64] = { 0 };

int key[64];

int l[17][32], r[17][32];

CharToBit(input, chartobit, 8);//转换为64个二进制数

IP(chartobit, Ip, IP_Table);//IP初始置换!

CharToBit(key_in, key, 8);

subKey_fun(key, subkeys);

for (int i = 0; i<32; i++) {

l[0][i] = Ip[i];

r[0][i] = Ip[32 + i];

}

for (int j = 1; j<16; j++) {//前15轮的操作

for (int k = 0; k<32; k++) {

l[j][k] = r[j - 1][k];

}

F_func(r[j - 1], r[j], subkeys[j - 1]);

Xor(r[j], l[j - 1], 32);

}

int t = 0;

for (t = 0; t<32; t++) {//最后一轮的操作,合并了将l,r swap r[16][t] = r[15][t];

}

F_func(r[15], l[16], subkeys[15]);

Xor(l[16], l[15], 32);

for (t = 0; t<32; t++) {

output_1[t] = l[16][t];

output_1[32 + t] = r[16][t];

}

IP_In(output_1, output, IPR_Table);

};

//解密实现

static void DES_Dfun(int input[64], char key_in[8], char output[8]) { int Ip[64] = { 0 };//存储初始置换后的矩阵

int output_1[64] = { 0 };

int output_2[64] = { 0 };

int subkeys[16][48];

//int chartobit[64]={0};

int key[64];

int l[17][32], r[17][32];

IP(input, Ip, IP_Table);//IP初始置换

CharToBit(key_in, key, 8);

subKey_fun(key, subkeys);

for (int i = 0; i<32; i++) {

l[0][i] = Ip[i];

r[0][i] = Ip[32 + i];

}

for (int j = 1; j<16; j++) {//前15轮的操作

for (int k = 0; k<32; k++) {

l[j][k] = r[j - 1][k];

}

F_func(r[j - 1], r[j], subkeys[16 - j]);

Xor(r[j], l[j - 1], 32);

}

int t = 0;

for (t = 0; t<32; t++) {//最后一轮的操作

r[16][t] = r[15][t];

}

F_func(r[15], l[16], subkeys[0]);

Xor(l[16], l[15], 32);

for (t = 0; t<32; t++) {

output_1[t] = l[16][t];

output_1[32 + t] = r[16][t];

}

IP_In(output_1, output_2, IPR_Table);

BitToChar(output_2, output, 8);

};

void IntToChar(int input[64], char output[8])

{

int a = 0x0; //定义一个16进制的二进制数用来存放input的一组四位数

for (int i = 0; i < 64; i++)

{

a = a * 2;

a = a + input[i];

if (i % 8 == 7)

{

if (a<0xa)

output[i / 8] = (char)(a + 0x30); //四组十六位二进制数转化为字符类型if (a>0x9)

output[i / 8] = (char)(a + 0x40 - 9);

a = 0;

}

}

}

void change(int in[64], char temp[8]) //天星转换术

{

bitset<64> m;

for (int i = 0; i < 64; i++)

{

m[i] = in[i];

}

fstream file1;

file1.open("d://temp.txt", ios::binary | ios::out);

file1.write((char*)&m, sizeof(m));

file1.close();

file1.open("d://temp.txt", ios::binary | ios::in);

file1.getline(temp, 64);

file1.close();

}

int main() {

//cout << (char)0x31 << endl;

int output[64] = { 0 };

char MIN[9] = { 0 };

char MI[9] = { 0 };

cout << "请输入明文\n";

cin >> MIN;

cout << "请输入秘钥\n";

cin >> MI;

DES_Efun(MIN, MI, output);

cout << "密文如下\n";

char miwen[64];

change(output, miwen);

cout << miwen << endl;

cout << "解密功能\n";

DES_Dfun(output, MI, MIN);

cout << "明文如下:\n";

for (int i = 0; i<8; i++) {

cout << MIN[i];

}

cout << "\n";

return 0;

}

MFC窗口文件tipDlg.cpp :

#include "stdafx.h"

#include "tip.h"

#include "tipDlg.h"

#include "afxdialogex.h"

#include"des.h"

#include

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// 用于应用程序“关于”菜单项的CAboutDlg 对话框

class CAboutDlg : public CDialogEx

{

public:

CAboutDlg();

// 对话框数据

#ifdef AFX_DESIGN_TIME

enum { IDD = IDD_ABOUTBOX };

#endif

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

// 实现

protected:

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)

{

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)

END_MESSAGE_MAP()

// CtipDlg 对话框

CtipDlg::CtipDlg(CWnd* pParent /*=NULL*/)

: CDialog(IDD_TIP_DIALOG, pParent)

, a(0)

, b(0)

, c(0)

, ming(_T(""))

, mi(_T(""))

, miwen1(_T(""))

, 解密明文(_T(""))

, jiemimw(_T(""))

, jmmw(_T(""))

, mi2(_T(""))

, mi3(_T(""))

{

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CtipDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

DDX_Text(pDX, IDC_EDIT4, ming);

DDX_Text(pDX, IDC_EDIT6, mi);

DDX_Text(pDX, IDC_EDIT7, miwen1);

DDX_Text(pDX, IDC_EDIT1, jmmw);

DDX_Text(pDX, IDC_EDIT2, mi2);

DDX_Text(pDX, IDC_EDIT3, mi3);

}

BEGIN_MESSAGE_MAP(CtipDlg, CDialog)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_BUTTON2, &CtipDlg::OnBnClickedButton2) ON_EN_CHANGE(IDC_EDIT4, &CtipDlg::OnEnChangeEdit4)

ON_EN_CHANGE(IDC_EDIT7, &CtipDlg::OnEnChangeEdit7)

ON_BN_CLICKED(IDC_BUTTON1, &CtipDlg::OnBnClickedButton1) END_MESSAGE_MAP()

// CtipDlg 消息处理程序

BOOL CtipDlg::OnInitDialog()

{

CDialog::OnInitDialog();

// 将“关于...”菜单项添加到系统菜单中。

// IDM_ABOUTBOX 必须在系统命令范围内。

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

BOOL bNameValid;

CString strAboutMenu;

bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);

ASSERT(bNameValid);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动

// 执行此操作

SetIcon(m_hIcon, TRUE); // 设置大图标

SetIcon(m_hIcon, FALSE); // 设置小图标

// TODO: 在此添加额外的初始化代码

return TRUE; // 除非将焦点设置到控件,否则返回TRUE

}

void CtipDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog::OnSysCommand(nID, lParam);

}

}

// 如果向对话框添加最小化按钮,则需要下面的代码

// 来绘制该图标。对于使用文档/视图模型的MFC 应用程序,

// 这将由框架自动完成。

void CtipDlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // 用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND,

reinterpret_cast(dc.GetSafeHdc()), 0);

// 使图标在工作区矩形中居中

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// 绘制图标

dc.DrawIcon(x, y, m_hIcon);

}

else

{

CDialog::OnPaint();

}

}

//当用户拖动最小化窗口时系统调用此函数取得光标

//显示。

HCURSOR CtipDlg::OnQueryDragIcon()

{

return static_cast(m_hIcon);

}

void CtipDlg::OnBnClickedButton2()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(TRUE);

string mingwen = (CStringA)ming; //明文

string miyao = (CStringA)mi; //密钥1

string miyao2 = (CStringA)mi2; //密钥2

string miyao3 = (CStringA)mi3; //密钥3

string miwen = (CStringA)miwen1; //密文

char * mingwen1 = &mingwen[0];

char * miyao1 = &miyao[0];

char * miyao22 = &miyao2[0];

char * miyao33 = &miyao3[0];

char * miwenn = &miwen[0];

//char * miwen3 = &miwen2[0];

char miwen11[64],miwen2[64];

int in[64],in2[64],in3[64];

DES_Efun(mingwen1,miyao1,in); //第一次DES加密change(in, miwen11);

DES_Efun(miwen11,miyao22,in2); //第二次DES加密

change(in2, miwen2);

DES_Efun(miwen2, miyao33, in3);//第三次DES加密

change(in3, miwenn);

miwen1 = miwenn;

/*char cjmmw[8];

DES_Dfun(in,miyao1,cjmmw);*/

jmmw = mingwen1;

UpdateData(FALSE);

}

void CtipDlg::OnEnChangeEdit4()

{

// TODO: 如果该控件是RICHEDIT 控件,它将不

// 发送此通知,除非重写CDialog::OnInitDialog()

// 函数并调用CRichEditCtrl().SetEventMask(),

// 同时将ENM_CHANGE 标志“或”运算到掩码中。

// TODO: 在此添加控件通知处理程序代码

}

void CtipDlg::OnEnChangeEdit7()

{

// TODO: 如果该控件是RICHEDIT 控件,它将不

// 发送此通知,除非重写CDialog::OnInitDialog()

// 函数并调用CRichEditCtrl().SetEventMask(),

// 同时将ENM_CHANGE 标志“或”运算到掩码中。

// TODO: 在此添加控件通知处理程序代码

}

void CtipDlg::OnBnClickedButton1()

{

// TODO: 在此添加控件通知处理程序代码

}

四、实验心得:

通过本次实验,可以说编程能力又有了提高,搞清楚了很多类型如CString、char、int、bitset 之间的转换,且对简单界面的实现也有了一些了解,同时对3DES的加解密过程更加的熟悉了

总之呢,经过这为其一周的课程设计,让我学到了许多课本上没有的知识,无论是密码学或是C++,非常感谢学校和老师安排的这次课程安排,尤其是张星老师的悉心指导和耐心辅助,

我才能最后将实验结果成功的输出,收获了很多,学习了不少,当然,仅仅几天的学习还是不够的,在今后的学习生活里还是要努力

《应用密码学》课程试卷(2)参考答案

2008——2009学年第一学期 课程名称:应用密码学使用班级:信息安全06级1、2、3班 命题系别: 网络工程学院 命题人:张仕斌、张金全、万武南 第一题 填空(共15个空,每空1分,计15分) 1、128,160 2、已知明文攻击、选择明文攻击 3、双钥体制或者公钥密码体制或者非对称密码体制 4、m序列 5、128,192,256 6、会话密钥,密钥加密密钥 7、同步流密码 8、分组链接(CBC)模式,密码反馈(CFB)模式 9、1408 第二题 判断题(共10题,每题1分,计10分) 1、√ 2、√ 3、× 4、√ 5、× 6、× 7、× 8、√ 9、×10、× 第三题 单项选择(共10题,每题2分,计20分) 1、D 2、B 3、A 4、A 5、D 6、C 7、B 8、C 9、B 10、C 第四题(本题由三个小题组成,共16分) 1、简述RSA算法;(4分) 提示:给出密钥产生过程、加密过程、解密过程及各过程中需要注意之处。 2、在RSA算法密钥产生过程中,设p=19,q=13,取公钥e=7,求私钥d;(要求:给出必要计算过程。6分) 3、设RSA算法的参数选择如上题所述,求消息m=41所对应的密文;(要求:给出必要计算过程。6分)

解:1)密钥的产生 ①选两个保密的大素数p和q。 ②计算n=p×q,φ(n)=(p-1)(q-1),其中φ(n)是n的欧拉函数值。 ③选一整数e,满足1

现代密码学课后答案第二版讲解

现代密码学教程第二版 谷利泽郑世慧杨义先 欢迎私信指正,共同奉献 第一章 1.判断题 2.选择题 3.填空题 1.信息安全的主要目标是指机密性、完整性、可用性、认证性和不可否认性。 2.经典的信息安全三要素--机密性,完整性和可用性,是信息安全的核心原则。 3.根据对信息流造成的影响,可以把攻击分为5类中断、截取、篡改、伪造和重放,进一 步可概括为两类主动攻击和被动攻击。

4.1949年,香农发表《保密系统的通信理论》,为密码系统建立了理论基础,从此密码学 成为了一门学科。 5.密码学的发展大致经历了两个阶段:传统密码学和现代密码学。 6.1976年,W.Diffie和M.Hellman在《密码学的新方向》一文中提出了公开密钥密码的 思想,从而开创了现代密码学的新领域。 7.密码学的发展过程中,两个质的飞跃分别指 1949年香农发表的《保密系统的通信理 论》和 1978年,Rivest,Shamir和Adleman提出RSA公钥密码体制。 8.密码法规是社会信息化密码管理的依据。 第二章 1.判断题 答案×√×√√√√××

2.选择题 答案:DCAAC ADA

3.填空题 1.密码学是研究信息寄信息系统安全的科学,密码学又分为密码编码学和密码分 析学。 2.8、一个保密系统一般是明文、密文、密钥、加密算法、解密算法 5部分组成的。 3.9、密码体制是指实现加密和解密功能的密码方案,从使用密钥策略上,可分为对称和 非对称。 4.10、对称密码体制又称为秘密密钥密码体制,它包括分组密码和序列 密码。

第三章5.判断 6.选择题

密码学级考卷A卷 答案

试题 2015 年~ 2016 年第1 学期 课程名称:密码学专业年级: 2013级信息安全 考生学号:考生姓名: 试卷类型: A卷■ B卷□考试方式: 开卷□闭卷■……………………………………………………………………………………………………… 一. 选择题(每题2分,共20分) 1.凯撒密码是有记录以来最为古老的一种对称加密体制,其加密算法的定义为, 任意,,那么使用凯撒密码加密SECRET的结果是什么()。 A. UGETGV B. WIGVIX C. VHFUHW D. XIVGIW 2.在一下密码系统的攻击方法中,哪一种方法的实施难度最高的()。 A. 唯密文攻击 B. 已知明文攻击 C. 选择明文攻击 D. 选择文本攻击 3.仿射密码顺利进行加解密的关键在于保证仿射函数是一个单射函数,即对于 任意的同余方程有唯一解,那么仿射密码的密钥空间大小是()。(表示中所有与m互素的数的个数) A. B. C. D. 4.为了保证分组密码算法的安全性,以下哪一点不是对密码算法的安全性要求

()。 A. 分组长度足够长 B. 由密钥确定置换的算法要足够复杂 C. 差错传播尽可能地小 D. 密钥量足够大 5.以下哪一种分组密码工作模式等价于同步序列密码()。 A. 电码本模式(ECB模式) B. 密码分组链接模式(CBC模式) C. 输出反馈模式(OFB模式) D. 密码反馈模式(CFB模式) 6.以下对自同步序列密码特性的描述,哪一点不正确()。 A.自同步性 B.无错误传播性 C.抗主动攻击性 D.明文统计扩散性 7.如下图所示的线性移位寄存器,初始值为,请问以下哪 一个选项是正确的输出序列()。 A. B. C. D. 8.以下关于消息认证码的描述,哪一点不正确()。 A.在不知道密钥的情况下,难以找到两个不同的消息具有相同的输出 B.消息认证码可以用于验证消息的发送者的身份 C.消息认证码可以用于验证信息的完整性 D.消息认证码可以用于加密消息 9.以下哪些攻击行为不属于主动攻击()。 A.偷听信道上传输的消息

2017年青岛大学应用密码学考研专业课真题硕士研究生入学考试试题

青岛大学2017年硕士研究生入学考试试题 科目代码:930科目名称:应用密码学(共3页) 请考生写明题号,将答案全部答在答题纸上,答在试卷上无效 一、填空题(本大题共6道小题,每空2分,共30分) 1.密码体制是完成加密和解密功能的密码方案或密码算法。一个密码体制通常 由以下5个部分构成:明文空间;密文空间;;加密算法与。 2.密码体制的分类有很多种,根据加密和解密所使用的密钥是否相同,可以将 密码体制分为:和。 3.20世纪40年代末,C.Shannon(香农)在遵循Kerckhoff原则前提下,提出 了设计密码系统的两个基本方法:和。 4.数据加密标准(DES)算法是一种采用传统的代替和置换操作加密的分组密 码,明文以比特为分组,密钥长度为比特,有效密钥长度为比特,迭代轮数为。 ?;m和n的5.设2332 5772 ==,则m的欧拉函数()= m n 2357,25711 m 最大公约数为,最小公倍数为。 6.MD5算法是由RSA的创始人Rivest设计开发的,该算法能接收任意长度的 消息作为输入,以比特分组来处理输入文本,输出比特的散列值。 二、选择题(本大题共10道小题,每小题3分,共30分) 1.1949年,()发表题为《保密系统的通信理论》的文章,为密码系统建立 了理论基础,从此密码学成了一门科学。 A、Shannon B、Diffie C、Hellman D、Shamir 2.AES结构由一下4个不同的模块组成,其中()是非线性模块。 A、字节代换 B、行位移 C、列混淆 D、轮密钥加 3.下面()不是Hash函数具有的特性。 A、单向性 B、可逆性 C、压缩性 D、抗碰撞性 4.Alice收到Bob发给他的一个文件的签名,并要验证这个签名的有效性,那 么验证算法中Alice选用的密钥是()。 A、Alice的公钥 B、Alice的私钥 C、Bob的公钥 D、Bob的私钥 5.设在RSA的公钥密码体制中,公钥为(e,n)=(13,35),则私钥d=()。 第1页,共3页

密码学试卷

武汉大学计算机学院 信息安全专业2004级“密码学”课程考试题 (卷面八题,共100分,在总成绩中占70分) 一、单表代替密码(10分) ①使加法密码算法称为对合运算的密钥k称为对合密钥,以英文为例求出其对合密钥,并以明文M=WEWILLMEETATMORNING 为例进行加解密,说明其对合性。 ②一般而言,对于加法密码,设明文字母表和密文字母表含有n个字母,n为≥1的正整数,求出其对合密钥k。 二、回答问题(10分) ①在公钥密码的密钥管理中,公开的加密钥Ke和保密的解密钥Kd的秘密性、真实性和完整性都需要确保吗?说明为什么? ②简述公钥证书的作用? 三、密码比较,说明两者的特点和优缺点。(10分) 对DES和AES进行比较,说明两者的特点和优缺点。 四、设A=[01,02,03,04]T,B=[b0,b1,b2,b3]T,利用反对数表查表计算AES中的列混淆,求出B。(10分) 五、设g(x)=x4+x2+1,g(x)为GF(2)上的多项式,以其为连接多项式组成线性移位寄存器。画出逻辑框图。设法遍历其所有状态,并写出其状态变迁及相应的输出序列。(15分) 六、考虑RSA密码体制:(15分) 1.取e=3有何优缺点?取d=3安全吗?为什么? 2.设n=35,已截获发给某用户的密文C=10,并查到该用户的公钥e=5,求出明文M。

七、令素数p=29,椭圆曲线为y2=x3+4x+20 mod 29,求出其所有解点,并构成解点群,其解点群是 循环群吗?为什么?。(15分) 八、在下述站点认证协议中函数f起什么作用?去掉f行不行?为什么?(15分) 设A,B是两个站点,A是发方,B是收方。它们共享会话密钥Ks ,f是公开的简单函数。A认证B是 否是他的意定通信站点的协议如下: 1.A产生一个随机数RN,并用Ks对其进行加密:C=E(RN,Ks),并发C给B。同时A对RN 进行f变换,得到f(RN)。 2.B收到C后,解密得到RN=D(C,Ks)。B也对RN进行f变换,得到f(RN),并将其加密 成C’=E(f(RN),Ks),然后发C’给A 。 3.A对收到的C’解密得到f(RN),并将其与自己在第①步得到的f(RN)比较。若两者相等, 则A认为B是自己的意定通信站点。否则A认为B不是自己的意定通信站点。 参考答案 (卷面八题,共100分,在总成绩中占70分) 一、单表代替密码(10分) ①使加法密码算法称为对合运算的密钥k称为对合密钥,以英文为例求出其对合密钥,并以明文M=WEWILLMEETATMORNING 为例进行加解密,说明其对合性。 ②一般而言,对于加法密码,设明文字母表和密文字母表含有n个字母,n为≥1的正整数,求出其对合密钥k。 解答: 1.加法密码的明密文字母表的映射公式: A为明文字母表,即英文字母表,B为密文字母表,其映射关系为: j=i+k mod 26 显然当k=13时,j=i+13 mod 26,于是有i = j+13 mod 26。此时加法密码是对合的。称此密钥k=13为对合密钥。

密码学期末考试复习

填空题 1、密码学的主要任务是实现性、鉴别、数据完整性、抗抵赖性。 1、性是一种允许特定用户访问和阅读信息,而非授权用户对信息容不可理解的安全属性。在密码学中,信息的性通过加密技术实现。 2、完整性数据完整性即用以确保数据在存储和传输过程中不被非授权修改的的安全属性。密码学可通过采用数据加密、报文鉴别或数字签名等技术来实现数据的完整性保护。 3、鉴别是一种与数据来源和身份鉴别有关的安全服务。鉴别服务包括对身份的鉴别和对数据源的鉴别。对于一次通信,必须确信通信的对端是预期的实体,这就涉及到身份的鉴别。 4、抗抵赖性 是一种用于阻止通信实体抵赖先前的通信行为及相关容的安全特性。密码学通过对称加密或非对称加密,以及数字签名等技术,并借助可信机构或证书机构的辅助来提供这种服务。 5、密码编码学的主要任务是寻求有效密码算法和协议,以保证信息的性或认证性的方法。它主要研究密码算法的构造与设计,也就是密码体制的构造。它是密码理论的基础,也是系统设计的基础。 6、密码分析学的主要任务是研究加密信息的破译或认证信息的伪造。它主要是对密码信息的解析方法进行研究。 7、明文(Plaintext)是待伪装或加密的消息(Message)。在通信系统中它可能是比特流,如文本、位图、数字化的语音流或数字化的视频图像等。 8、密文(Ciphertext)是对明文施加某种伪装或变换后的输出,也可认为是不可直接理的字符或比特集,密文常用c表示。 9、加密(Encrypt )是把原始的信息(明文)转换为密文的信息变换过程。 10、解密(Decrypt)是把己加密的信息(密文)恢复成原始信息明文的过程。 11、密码算法(Cryptography Algorithm)也简称密码(Cipher),通常是指加、解密过程所使用的信息变换规则,是用于信息加密和解密的数学函数。对明文进行加密时所采用的规则称作加密算法,而对密文进行解密时所采用的规则称作解密算法。加密算法和解密算法的操作通常都是在一组密钥的控制下进行的。 11、密钥(Secret Key )密码算法中的一个可变参数,通常是一组满足一定条件的随机序列 12、替代密码是指先建立一个替换表,加密时将需要加密的明文依次通过查表,替换为相应的字符,明文字符被逐个替换后,生成无任何意义的字符串,即密文,替代密码的密钥就是其替换表。

汕头大学应用密码学期末复习资料

2019 年汕头大学应用密码学期末复习资料 (本次考试题型全部是问答题,有的题中包含计算,无选择填空,共八道大题)PS:本复习资料仅代表2019 年考试内容,老师年年会微调考试内容,但大体方向不变。本资 料删去无用内容,所有出现的内容均为重点,基本涵盖了所有内容。 资料由往年师兄师姐的精华加以整理,内容以老师PPT 为主,加本人的考后整理增加部分复习要点。 第一章概述 信息安全的目标和背景,为什么要学密码学? 密码学是信息安全学科的核心,密码学就是研究与信息安全相关方面诸如保密性、完整性、实体鉴别、抗抵赖性的数学理论与技术。 信息安全的三个基本目标(考题): 保密性:消息能够被安全地传送,即窃听者不能阅读发送的消息 完整性:消息的接收者应该能够验证正在传递的消息过程中有没有被修改,入侵者不能用假消息代替合法的消息。 可用性:即保证信息和信息系统随时为授权者提供服务,而不要出现非授权者滥用却对授权者拒绝服务的情况 信息安全技术产生的前提(考题): 不可靠的网络传输 阐述古典密码学中的两种主要技术以及公钥密码学思想。 答:代换(Substitution)和置换(Permutation)是古典密码学中两种主要的技术。代替技术就是将明文中每一个字符替换成另外一个字符从而形成密文,置换技术则是通过重新排列明文消息中元素的位置而不改变元素本身从而形成密文。 公钥密码的思想:密码系统中的加密密钥和解密密钥是可以不同的。由于并不能容易的通过加密密钥和密文来求得解密密钥或明文,所以可以公开这种系统的加密算法和加密密钥,用户则只要保管好自己的解密密钥。 密码算法的安全性(考题) 无条件安全:无论破译者有多少密文,给出无限的资源,他也无法解出对应的明文。 计算上安全:破译的代价超出本身的价值,破译的时间超出了信息的有效期。 对称密码又可以分成: 流密码和分组密码 分组密码每次对一块数据(Block)加密 流密码每次对一位或一字节加密 第二章数论基础 1.掌握 Euclid 辗转相除法 2.解一次同余计算式 (不会单独出一道题考你,会整合在 RSA 那章中出现,两个方法都必须掌握) (a,b)即表示求 a,b 的最大公约数 计算实例如下图

现代密码学论文

现代密码学论文 院(系)名称理学院 专业班级计算131班学号130901027 学生姓名王云英

摘要 现代密码学研究信息从发端到收端的安全传输和安全存储,是研究“知己知彼”的一门科学。其核心是密码编码学和密码分析学。前者致力于建立难以被敌方或对手攻破的安全密码体制,即“知己”,后者则力图破译敌方或对手已有的密码体制,即“知彼”。人类有记载的通信密码始于公元前400年。1881年世界上的第一个电话保密专利出现。电报、无线电的发明使密码学成为通信领域中不可回避的研究课题。 现有的密码体制千千万万各不相同。但是它们都可以分为私钥密码体制(如DES密码)和公钥密码(如公开密钥密码)。前者的加密过程和脱密过程相同,而且所用的密钥也相同;后者,每个用户都有公开和秘密钥。现代密码学是一门迅速发展的应用科学。随着因特网的迅速普及,人们依靠它传送大量的信息,但是这些信息在网络上的传输都是公开的。因此,对于关系到个人利益的信息必须经过加密之后才可以在网上传送,这将离不开现代密码技术。PKI是一个用公钥概念与技术来实施和提供安全服务的具有普适性的安全基础设施。PKI公钥基础设施的主要任务是在开放环境中为开放性业务提供数字签名服务。

现代密码学的算法研究 密码算法主要分为对称密码算法和非对称密码算法两大类。对称加密算法指加密密钥和解密密钥相同,或知道密钥之一很容易推导得到另一个密钥。通常情况下,对称密钥加密算法的加\解密速度非常快,因此,这类算法适用于大批量数据的场合。这类算法又分为分组密码和流密码两大类。 1.1 分组密码 分组密码算法实际上就是密钥控制下,通过某个置换来实现对明文分组的加密变换。为了保证密码算法的安全强度,对密码算法的要求如下。 1.分组长度足够大:当分组长度较小时,分组密码类似于古典的代替密码,它仍然保留了明文的统计信息,这种统计信息将给攻击者留下可乘之机,攻击者可以有效地穷举明文空间,得到密码变换本身。 2.密钥量足够大:分组密码的密钥所确定密码变换只是所有置换中极小一部分。如果这一部分足够小,攻击者可以有效地穷举明文空间所确定所有的置换。这时,攻击者就可以对密文进行解密,以得到有意义的明文。 3.密码变换足够复杂:使攻击者除了穷举法以外,找不到其他快捷的破译方法。 分组密码的优点:明文信息良好的扩展性,对插入的敏感性,不需要密钥同步,较强的适用性,适合作为加密标准。 分组密码的缺点:加密速度慢,错误扩散和传播。 分组密码将定长的明文块转换成等长的密文,这一过程在秘钥的控制之下。使用逆向变换和同一密钥来实现解密。对于当前的许多分组密码,分组大小是 64 位,但这很可能会增加。明文消息通常要比特定的分组大小长得多,而且使用不同的技术或操作方式。 1.2流密码 流密码(也叫序列密码)的理论基础是一次一密算法,它是对称密码算法的一种,它的主要原理是:生成与明文信息流同样长度的随机密钥序列(如 Z=Z1Z2Z3…),使用此密钥流依次对明文(如X=X0X1X2...)进行加密,得到密文序列,解密变换是加密变换的逆过程。根据Shannon的研究,这样的算法可以达到完全保密的要求。但是,在现实生活中,生成完全随机的密钥序列是不可行的,因此只能生成一些类似随机的密钥序列,称之为伪随机序列。 流密码具有实现简单、便于硬件实施、加解密处理速度快、没有或只有有限的错误传播等特点,因此在实际应用中,特别是专用或机密机构中保持着优势,典型的应用领域包括无线通信、外交通信。如果序列密码所使用的是真正随机方式的、与消息流长度相同的密钥流,则此时的序列密码就是一次一密的密码体制。若能以一种方式产生一随机序列(密钥流),这一序列由密钥所确定,则利用这样的序列就可以进行加密,即将密钥、明文表示成连续的符号或二进制,对应地进行加密,加解密时一次处理明文中的一个或几个比特。 流密码研究内容集中在如下两方面: (1)衡量密钥流序列好坏的标准:通常,密钥序列的检验标准采用Golomb的3点随机性公设,除此之外,还需做进一步局部随机性检验,包括频率检验、序列

应用密码学试题

东华2011~2012学年《应用密码学》试卷 (回忆版) 一. 单选题 1. 以下关于非对称密码的说法,错误的是() A. 加密算法和解密使用不同的密钥 B.非对称密码也称为公钥密码 C. 非对称密码可以用来实现数字签名 D. 非对称密码不能用来加密数据 2. 在RSA密钥产生过程中,选择了两个素数,p=17,q=41,求欧拉函数Φ(n)的值() A. 481 B. 444 C. 432 D. 640 3. 假如Alice想使用公钥密码算法发送一个加密的消息给Bob,此信息只有Bob 才能解密,Alice使用哪个密钥来加密这个信息?() A.A的公钥 B. A的私钥 C. B的公钥 D. B的私钥 4. 以下基于大整数因子分解难题的公钥密码算法是?() A. EIGamal B. ECC C. RSA D. AES 5. 以下哪种算法为不可逆的数学运算 A.MD5 B.RC4 C.IDEA D.DES 6. MAC和对称加密类似,但是也有区别,以下哪个选项指出了MAC和对称加密算法的区别? A.MAC不使用密钥 B.MAC使用两个密钥分别用于加密和解密 C.MAC是散列函数 D.MAC算法不要求可逆性而加密算法必须是可逆的

7. HMAC使用SHA-1作为其嵌入的散列函数,使用的密钥长度是256位,数据长度1024位,则该HMAC的输出是多少位? A. 256 B. 1024 C. 512 D. 160 二.填空题 1. DES加密算法的明文分组长度是位,密文分组长度是位;AES分组长度是位;MD5输出是位;SHA-1输出是位。 2. 如C=9m+2(mod26),此时假设密文C=7,则m= . 3.已知RSA加密算法中,n=21,e=5,当密文c=7时,求出此时的明文m= 4.Hmac的算法表达式是。 5.假设hash函数h的输出为k位,则散列结果发生碰撞的概率为 6. DES加密算法是结构,AES算法是结构。 三解答题 1.解释说明什么是零知识证明 2.Hash函数h,请分析h 特性和安全要求

现代密码学教程课后部分答案考试比用

第一章 1、1949年,(A )发表题为《保密系统的通信理论》的文章,为密码系统建立了理论基础,从此密码学成了一门科学。 A、Shannon B、Diffie C、Hellman D、Shamir 2、一个密码系统至少由明文、密文、加密算法、解密算法和密钥5部分组成,而其安全性是由(D)决定的。 A、加密算法 B、解密算法 C、加解密算法 D、密钥 3、计算和估计出破译密码系统的计算量下限,利用已有的最好方法破译它的所需要的代价超出了破译者的破译能力(如时间、空间、资金等资源),那么该密码系统的安全性是(B )。 A无条件安全B计算安全C可证明安全D实际安全 4、根据密码分析者所掌握的分析资料的不同,密码分析一般可分为4类:唯密文攻击、已知明文攻击、选择明文攻击、选择密文攻击,其中破译难度最大的是(D )。 A、唯密文攻击 B、已知明文攻击 C、选择明文攻击 D、选择密文攻击 5、1976年,W.Diffie和M.Hellman在密码学的新方向一文中提出了公开密钥密码的思想,从而开创了现代密码学的新领域。 6、密码学的发展过程中,两个质的飞跃分别指1949年香农发表的保密系统的通信理论和公钥密码思想。 7、密码学是研究信息及信息系统安全的科学,密码学又分为密码编码学和密码分析学。 8、一个保密系统一般是明文、密文、密钥、加密算法、解密算法5部分组成的。 9、密码体制是指实现加密和解密功能的密码方案,从使用密钥策略上,可分为对称和非对称。 10、对称密码体制又称为秘密密钥密码体制,它包括分组密码和序列密码。 第二章 1、字母频率分析法对(B )算法最有效。 A、置换密码 B、单表代换密码 C、多表代换密码 D、序列密码 2、(D)算法抵抗频率分析攻击能力最强,而对已知明文攻击最弱。 A仿射密码B维吉利亚密码C轮转密码D希尔密码 3、重合指数法对(C)算法的破解最有效。 A置换密码B单表代换密码C多表代换密码D序列密码 4、维吉利亚密码是古典密码体制比较有代表性的一种密码,其密码体制采用的是(C )。 A置换密码B单表代换密码C多表代换密码D序列密码 5、在1949年香农发表《保密系统的通信理论》之前,密码学算法主要通过字符间的简单置换和代换实现,一般认为这些密码体制属于传统密码学范畴。 6、传统密码体制主要有两种,分别是指置换密码和代换密码。 7、置换密码又叫换位密码,最常见的置换密码有列置换和周期转置换密码。 8、代换是传统密码体制中最基本的处理技巧,按照一个明文字母是否总是被一个固定的字母代替进行划分,代换密码主要分为两类:单表代换和多表代换密码。 9、一个有6个转轮密码机是一个周期长度为26 的6次方的多表代替密码机械装置。 第四章 1、在( C )年,美国国家标准局把IBM的Tuchman-Meyer方案确定数据加密标准,即DES。 A、1949 B、1972 C、1977 D、2001 2、密码学历史上第一个广泛应用于商用数据保密的密码算法是(B )。 A、AES B、DES C、IDEA D、RC6 3、在DES算法中,如果给定初始密钥K,经子密钥产生的各个子密钥都相同,则称该密钥K为弱密钥,DES算法弱密钥的个数为(B )。 A、2 B、4 C、8 D、16

汕头大学应用密码学期末复习资料

2019年汕头大学应用密码学期末复习资料 (本次考试题型全部是问答题,有的题中包含计算,无选择填空,共八道大题) PS:本复习资料仅代表2019年考试内容,老师年年会微调考试内容,但大体方向不变。本资料删去无用内容,所有出现的内容均为重点,基本涵盖了所有内容。 资料由往年师兄师姐的精华加以整理,内容以老师PPT为主,加本人的考后整理增加部分复习要点。 第一章概述 信息安全的目标和背景,为什么要学密码学? 密码学是信息安全学科的核心,密码学就是研究与信息安全相关方面诸如保密性、完整性、实体鉴别、抗抵赖性的数学理论与技术。 信息安全的三个基本目标(考题): 保密性:消息能够被安全地传送,即窃听者不能阅读发送的消息 完整性:消息的接收者应该能够验证正在传递的消息过程中有没有被修改,入侵者不能用假消息代替合法的消息。 可用性:即保证信息和信息系统随时为授权者提供服务,而不要出现非授权者滥用却对授权者拒绝服务的情况 信息安全技术产生的前提(考题): 不可靠的网络传输 阐述古典密码学中的两种主要技术以及公钥密码学思想。 答:代换(Substitution)和置换(Permutation)是古典密码学中两种主要的技术。代替技术就是将明文中每一个字符替换成另外一个字符从而形成密文,置换技术则是通过重新排列明文消息中元素的位置而不改变元素本身从而形成密文。 公钥密码的思想:密码系统中的加密密钥和解密密钥是可以不同的。由于并不能容易的通过加密密钥和密文来求得解密密钥或明文,所以可以公开这种系统的加密算法和加密密钥,用户则只要保管好自己的解密密钥。 密码算法的安全性(考题) 无条件安全:无论破译者有多少密文,给出无限的资源,他也无法解出对应的明文。 计算上安全:破译的代价超出本身的价值,破译的时间超出了信息的有效期。 对称密码又可以分成: 流密码和分组密码 分组密码每次对一块数据(Block)加密 流密码每次对一位或一字节加密 第二章数论基础 1.掌握Euclid辗转相除法 2.解一次同余计算式 (不会单独出一道题考你,会整合在RSA那章中出现,两个方法都必须掌握) (a,b)即表示求a,b的最大公约数 计算实例如下图

密码学及其研究现状(2014年)

密码学及其研究现状(2014年) {摘要}: 密码系统的两个基本要素是加密算法和密钥管理。加密算法是一些公式和法则,它规定了明文和密文之间的变换方法。由于密码系统的反复使用,仅靠加密算法已难以保证信息的安全了。事实上,加密信息的安全可靠依赖于密钥系统,密钥是控制加密算法和解密算法的关键信息,它的产生、传输、存储等工作是十分重要的。{关键词}:密码技术安全网络密匙管理 密码技术是信息安全的核心技术。如今,计算机网络环境下信息的保密性、完 整性、可用性和抗抵赖性,都需要采用密码技术来解决。密码体制大体分为对称密 码(又称为私钥密码)和非对称密码(又称为公钥密码)两种。公钥密码在信息安全中 担负起密钥协商、数字签名、消息认证等重要角色,已成为最核心的密码。 密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这 些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。密码在早 期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据 等都可实施加、脱密变换。 密码学是在编码与破译的斗争实践中逐步发展起来的,并随着先进科学技术的 应用,已成为一门综合性的尖端技术科学。它与语言学、数学、电子学、声学、信 息论、计算机科学等有着广泛而密切的联系。它的现实研究成果,特别是各国政府 现用的密码编制及破译手段都具有高度的机密性。 进行明密变换的法则,称为密码的体制。指示这种变换的参数,称为密钥。它 们是密码编制的重要组成部分。密码体制的基本类型可以分为四种:错乱--按照 规定的图形和线路,改变明文字母或数码等的位置成为密文;代替--用一个或多 个代替表将明文字母或数码等代替为密文;密本--用预先编定的字母或数字密码 组,代替一定的词组单词等变明文为密文;加乱--用有限元素组成的一串序列作 为乱数,按规定的算法,同明文序列相结合变成密文。以上四种密码体制,既可单 独使用,也可混合使用,以编制出各种复杂度很高的实用密码。 当前,公钥密码的安全性概念已经被大大扩展了。像著名的RSA公钥密码算法、 Rabin公钥密码算法和ElGamal公钥密码算法都已经得到了广泛应用。但是,有些公

应用密码学习题答案

《应用密码学》习题和思考题答案 第4章 密码学数学引论 4-1 编写一个程序找出100~200间的素数。 略 4-2 计算下列数值:7503mod81、(-7503)mod81、81mod7503、(-81)mod7503。 解:7503mod81=51 (-7503)mod81=30 81mod7503=81 (-81)mod7503=7422 4-3 证明:(1)[]))(m od (m od )(m od )(m od m b a m m b m a ?=? (2)[][])(m od ))(m od ())(m od (m od )(m m c a m b a m c b a ?+?=+? 证明: (1)设(mod )a a m r =,(mod )b b m r =,则a a r jm =+(j 为某一整数),b b r km =+(k 为某一整数)。于是有: [](mod )(mod )mod ()(mod )a b a m b m m r r m ?= ()()() ()() ()() 2()(mod )mod mod mod a b a b a b a b a b m r jm r km m r r r km r jm kjm m r r m ?=++=+++= 于是有:[]))(m od (m od )(m od )(m od m b a m m b m a ?=? (2)设(mod )a a m r =,(mod )b b m r =,(mod )c c m r =,则a a r jm =+(j 为某一整数),b b r km =+(k 为某一整数),c c r im =+(i 为某一整数)。于是有: []()()()()[]()()22()mod (mod ) (mod ) mod mod a b c a b c a b a a a c b c a b a c a b c m r jm r km r im m r jm r km r im m r r r im r km r r r jm kjm r jm ijm m r r r r m ???+=++++????????=++++??=+++++++=+ []()()()()()[]()(mod )()(mod )(mod ) mod mod mod mod a b a c a b a c a b m a c m m r jm r km m r jm r im m m r r r r m ?+?=+++++????=+ 于是有:[][])(m od ))(m od ())(m od (m od )(m m c a m b a m c b a ?+?=+?

密码学在电子商务中的应用

密码学在电子商务中的应用

密码学在电子商务中的应用 摘要 : 随着Internet的发展,电子商务已经逐渐成为人们进行商务活动的新模式。越来越多的人通过Internet进行商务活动。从而人们面对面的交易和作业变成网上相互不见面的操作,电子商务的发展前景十分诱人,但是由于没有国界、没有空间时间限制,可以利用互联网的资源和工具进行访问、攻击甚至破坏。而其安全问题也变得越来越突出,如何建立一个安全、便捷的电子商务应用环境,对心细提供足够的保护,已经成为商家和用户都十分关心的话题。本文从密码学基础,电子商务安全问题,电子商务中的信息安全技术出发进行分析。 关键词:密码学;电子商务;交易安全问题。 收稿日期:2011-06-11 中图分类号TP391 文献标识码 B 文章编号1007 - 7731 (2011) 23 - 40 – 02 作者简介:李春丹, 女, 理科部电子商务班大二学生,40926102。 互联网已经日渐融入到人类社会的各个方面中,网络防护与网络攻击之间的斗争也将更加激烈。这就对网络安全技术提出了更高的要求。未来的网络安全技术将会涉及到计算机网络的各个层次中,但围绕电子商务安全的防护技术将在未来几年中成为重点,如身份认证、授权检查、数据安全、通信安全等将对电子商务安全产生决定性影响。一,密码学基础 现代密码学研究信息从发端到收端的安全传输和安全存储,是研

究“知己知彼”的一门科学。其核心是密码编码学和密码分析学。前者致力于建立难以被敌方或对手攻破的安全密码体制,即“知己”;后者则力图破译敌方或对手已有的密码体制,即“知彼”。 编码密码学主要致力于信息加密、信息认证、数字签名和密钥管理方面的研究。信息加密的目的在于将可读信息转变为无法识别的内容,使得截获这些信息的人无法阅读,同时信息的接收人能够验证接收到的信息是否被敌方篡改或替换过;数字签名就是信息的接收人能够确定接收到的信息是否确实是由所希望的发信人发出的;密钥管理是信息加密中最难的部分,因为信息加密的安全性在于密钥。历史上,各国军事情报机构在猎取别国的密钥管理方法上要比破译加密算法成功得多。 密码分析学与编码学的方法不同,它不依赖数学逻辑的不变真理,必须凭经验,依赖客观世界觉察得到的事实。因而,密码分析更需要发挥人们的聪明才智,更具有挑战性。 现代密码学是一门迅速发展的应用科学。随着因特网的迅速普及,人们依靠它传送大量的信息,但是这些信息在网络上的传输都是公开的。因此,对于关系到个人利益的信息必须经过加密之后才可以在网上传送,这将离不开现代密码技术。 二,电子商务安全问题。 电子商务的一个重要技术特征是利用IT技术来传输和处理商业信息。因此,电子商务安全从整体上可分为两大部分:计算机网络安全和商务交易安全。

应用密码学期末考试复习大纲

应用密码学复习大纲 第一章古典密码 1.1 密码学的五元组(明文,密文,密钥,加密算法,解密算法)(P15) 1.2 密码体制(P21) 完成加密和解密的算法。通常,数据的加密和解密过程是通过密码体制(cipher system) +密钥(keyword)来控制的。密码体制必须易于使用,特别是应当可以在微型计算机使用。密码体制的安全性依赖于密钥的安全性,现代密码学不追求加密算法的保密性,而是追求加密算法的完备,即:使攻击者在不知道密钥的情况下,没有办法从算法找到突破口。 可证明安全性无条件安全性(p18) 1.3 代替密码体制:(单表代替密码多表代替密码)p31 就是明文中的每一个字符被替换成密文中的另一个字符。接收者对密文做反响替换就可以恢复出明文。(在这里具体的代替方案称为密钥) 1.3.1 单表代替密码P31:明文的相同字符用相应的一个密文字符代替。(移位密码,乘数密码,仿射密码,多项式密码,密钥短语密码) 单表代替密码的特点: ▲密钥空间K很大,|K|=26!=4×1026 ,破译者穷举搜索计算不可行,1微秒试一个密钥,遍历全部密钥需要1013 年。 ▲移位密码体制是替换密码体制的一个特例,它仅含26个置换做为密钥空间。密钥π不便记忆。 ▲针对一般替换密码密钥π不便记忆的问题,又衍生出了各种形式单表替代密码。 单表代替密码的弱点:P32 ▲密钥量很小,不能抵抗穷尽搜索攻击 ▲没有将明文字母出现的概率掩藏起来,很容易受到频率分析的攻击 ▲不具备雪崩效应▲加解密数学表达式简单 1.3.2 多表代替密码P34:是以一系列(两个以上)代换表依次对明文消息的字母进行代换的方法。(维吉尼亚Vigenere密码,Hill密码,Playfair密码) 多表代替密码的特点:使用了两个或两个以上的替代表。 Vegenere密码算法P38(计算类)15分 第二章对称密码体制 2.1 对称密码体制(分组密码,序列密码)的概念 对称密钥密码体制,对于大多数算法,解密算法是加密算法的逆运算,加密密钥和解密密钥相同,同属一类的加密体制。拥有加密能力就意味着拥有解密能力,反之亦然。对称密码体制保密强度高,但开放性差,它要求发送者和接收者在安全通信之前,需要有可靠的密钥信道传递密钥,而双方用户通信所用的密钥也必须妥善保管。 2.2 分组密码 P63

信息安全期末考试题(卷)库与答案解析

题库 一、选择 1. 密码学的目的是(C)。 A. 研究数据加密 B. 研究数据解密 C. 研究数据某 D. 研究信息安全 2. 从攻击方式区分攻击类型,可分为被动攻击和主动攻击。被动攻击难以(C),然而(C)这些攻击是可行的;主动攻击难以(C),然而(C)这些攻击是可行的。 A. 阻止,检测,阻止,检测 B. 检测,阻止,检测,阻止 C. 检测,阻止,阻止,检测 D. 上面3项都不是 3. 数据某性安全服务的基础是(D)。 A. 数据完整性机制 B. 数字签名机制 C. 访问控制机制 D. 加密机制 4. 数字签名要预先使用单向Hash函数进行处理的原因是(C)。 A. 多一道加密工序使密文更难破译 B. 提高密文的计算速度 C. 缩小签名密文的长度,加快数字签名和验 证签名的运算速度 D. 保证密文能正确还原成明文 5. 基于通信双方共同拥有的但是不为别人知道的秘密,利用计算机强大的计算能力,以该秘密作为加密和解密的密钥的认证是(C)。 A. 公钥认证 B. 零知识认证 C. 共享密钥认证 D. 口令认证 6. 为了简化管理,通常对访问者(A),以避免访问控制表过于庞大。 A. 分类组织成组 B. 严格限制数量 C. 按访问时间排序,删除长期没有访问的用户 D. 不作任何限制 7. PKI管理对象不包括(A)。 A. ID和口令 B. 证书 C. 密钥 D. 证书撤消 8. 下面不属于PKI组成部分的是(D)。 A. 证书主体 B. 使用证书的应用和系统 C. 证书权威机构 D. AS 9. IKE协商的第一阶段可以采用(C)。 A. 主模式、快速模式 B. 快速模式、积极模式 C. 主模式、积极模式 D. 新组模式 10.AH协议和ESP协议有(A)种工作模式。 A. 二 B. 三 C. 四 D. 五 11. (C)属于Web中使用的安全协议。 A. PEM、SSL B. S-HTTP、S/MIME C. SSL、S-HTTP D. S/MIME、SSL 12. 包过滤型防火墙原理上是基于(C)进行分析的技术。

公钥密码学的理论基础

公钥密码学的理论基础—单向函数 1976年,Diffie W.和Hellman M.E.在他们的《密码学的新方向》一文中提出了公钥密码的概念。随后,在1978年,Rivest R.L.,Shamir A.和Adleman L.M.在其文《实现数字签名和公钥密码体制的一种方法》中最先提出了一种可行的实现方法,这就是我们现在广泛使用的RSA 体制。RSA体制的提出真正使得互不相识的通信双方在一个不安全 的信道上进行安全通信最终成为可能,也是我们今天CA服务的源泉。然而,人们很少关心当前幸福生活的背后有一位默默的奉献者—单向函数。 单向和陷门单向函数的概念是公钥密码学的核心,可以说公钥密码体制的设计就是陷门单向函数的设计。那么什么是单向函数?什么是陷门单向函数?他们的密码学意义何在?本文试图作一个初浅的 介绍。 1 单向函数 给定任意两个集合X和Y。函数f:X Y 称为单向的,如果对每一个x属于X,很容易计算出函数f(x)的值,而对大多数y属于Y,要确定满足y=f(x)的x是计算上困难的(假设至少有这样一个x存在)。注意,不能将单向函数的概念与数学意义上的不可逆函数的概念混同,因为单向函数可能是一个数学意义上可逆或者一对一的函数,而一个不可逆函数却不一定是单向函数。

目前,还没有人能够从理论上证明单向函数是存在的。单向函数存在性的证明将意味着计算机科学中一个最具挑战性的猜想P=NP,即NP完全问题的解决,而关于NP完全性的理论却不足以证明单向函数的存在。有幸的是,现实中却存在几个单向函数的“候选”。说他们是“候选”,是因为他们表现出了单向函数的性质,但还没有办法从理论上证明它们一定是单向函数。 一个最简单的、大家熟知的“侯选”单向函数就是整数相乘。众所周知,不管给定两个多大的整数,我们很容易计算出它们的乘积,而对于一个300位左右的十进制整数,即使已知它是两个大小差不多(150位左右的十进制数)的素数之积,用世界上计算能力最强的计算机,也没有办法在一个合理的时间内分解出构成这个整数的两个素数因子来。这里讲的“合理的时间”是指一个可度量的相当长的时间,比如人类或者地球的寿命等。 另一个单向函数的侯选就是固定基数和模数的模指数运算。设n 和a是整数,而且1 2 陷门单向函数 显然,单向函数不能直接用作密码体制,因为如果用单向函数对明文进行加密,即使是合法的接收者也不能还原出明文了,因为单向函数的逆运算是困难的。与密码体制关系更为密切的概念是陷门单向函数。一个函数f:X Y 称为是陷门单向的,如果该函数及其逆函数的计算都存在有效的算法,而且可以将计算f的方法公开,即使由计

密码学原理与应用复习大纲

密码学原理与应用复习大纲 第一部分古典密码 1.1 密码学的五元组(明文,密文,密钥,加密算法,解密算法)及各部分的含义 1.2 密码体制 什么是密码体制? 完成加密和解密的算法。通常,数据的加密和解密过程是通过密码体制(cipher system) +密钥(keyword)来控制的。密码体制必须易于使用,特别是应当可以在微型计算机使用。密码体制的安全性依赖于密钥的安全性,现代密码学不追求加密算法的保密性,而是追求加密算法的完备,即:使攻击者在不知道密钥的情况下,没有办法从算法找到突破口。 1.3 代替密码体制:(单表代替密码多表代替密码) 就是明文中的每一个字符被替换成密文中的另一个字符。接收者对密文做反响替换就可以恢复出明文。(在这里具体的代替方案称为密钥) 单表代替密码 明文的相同字符用相应的一个密文字符代替。(移位密码,乘数密码,仿射密码,多项式密码,密钥短语密码) 单表代替密码的特点: ▲密钥空间K很大,|K|=26!=4×1026 ,破译者穷举搜索计算不可行,1微秒试一个密钥,遍历全部密钥需要1013 年。

▲移位密码体制是替换密码体制的一个特例,它仅含26个置换做为密钥空间。密钥π不便记忆。 ▲针对一般替换密码密钥π不便记忆的问题,又衍生出了各种形式单表替代密码。 单表代替密码的弱点: ▲密钥量很小,不能抵抗穷尽搜索攻击 ▲没有将明文字母出现的概率掩藏起来,很容易受到频率分析的攻击 ▲不具备雪崩效应▲加解密数学表达式简单多表代替密码 是以一系列(两个以上)代换表依次对明文消息的字母进行代换的方法。(维吉尼亚Vigenere密码,Hill密码,Playfair密码)多表代替密码的特点:使用了两个或两个以上的替代表。 Vegenere密码算法(分析类)15分,参考第一讲课件 第二部分对称密码体制 2.1 对称密码体制(分组密码,序列密码)的概念 对称密钥密码体制,对于大多数算法,解密算法是加密算法的逆运算,加密密钥和解密密钥相同,同属一类的加密体制。拥有加密能力就意味着拥有解密能力,反之亦然。对称密码体制保密强度高,但开放性差,它要求发送者和接收者在安全通信之前,需要有可靠的密钥信道传递密钥,而双方用户通信所用的密钥也必须妥善保管。2.2 分组密码

相关文档