注意不经老师允许不准烧写自己修改的代码
•1. 三人一组
•2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.1-1.5安装MDK,JLink驱动,注意,要用系统管理员身分运行uVision4,破解MDK(破解程序中target一定选ARM)
•3. 提交破解程序中产生LIC的截图
•4. 提交破解成功的截图
•任务详情
•注意不经老师允许不准烧写自己修改的代码
•1. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图
•2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.9”完成LED实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图
•3. 实验报告中分析代码
1) 系统初始化
SystemInit ();
2)通过返回 boot 条件,判断程序是否进行下载
if(0 == GPIO_GetVal(0))
{
BtApiBack(0x55555555, 0xAAAAAAAA);
}
3) 将GPIO0设置为上拉输出
GPIO_PuPdSel(0,0);
GPIO_InOutSet(0,0);
4) 设置LED 灯闪烁间隔
while(1)
{
delay(100);
GPIO_SetVal(0,0); // 输出低电平,点亮 LEDLED
delay(100);
GPIO_SetVal(0,1); // 输出高电平,熄灭 LEDLED
}
要求:
0. 注意不经老师允许不准烧写自己修改的代码
1. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图
2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.0”完成UART发送与中断接收实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图
3. 实验报告中分析代码
要求:
0. 网上搜集国密算法标准SM1,SM2,SM3,SM4
1. 网上找一下相应的代码和标准测试代码,在Ubuntu中分别用gcc和gcc-arm编译
2. 四个算法的用途?
3. 《密码学》课程中分别有哪些对应的算法?
4. 提交2,3两个问题的答案
5. 提交在Ubuntu中运行国密算法测试程序的截图
国密算法 | 对应的密码学算法 |
SM1 | 未公布 |
SM2 | ECC |
SM3 | MD5 |
SM4 | DES |
按A校验密码,成功后按1加密,可以看到明文,密钥,密文;
按A读取IC卡中的密文和密钥,读取成功后,按1选择用正确密钥加密
1) 初始化 IC卡,检测IC卡插入端口 ;
GPIO_Config(6);
GPIO_PuPdSel(6,0);
GPIO_InOutSet(6,1);
2) 串口初始化;
UART_Init();
3) LCD灯初始化;
lcd_init();
4) 矩阵键盘初始化;
KEY_Init();
5) 液晶屏第一行显示“ SLE4428 实验!”
lcd_pos(0,0);
lcd_string("SLE4428 实验!");
程序A:
6) 第二行显示“请插入 IC 卡”等待片插入;
lcd_pos(1,0);
lcd_string("请插入IC卡");
delay(1000);
if(GPIO_GetVal(6)==0) break;
7)若SLE4428 IC卡正确插入 ,第二行显示“已插入SLE4428 ”;卡片插入错误则第二行显示“卡不正确 ”;
if(SLE4428_InitAndRST(2)!=0xFFFFFFFF)
{
lcd_pos(1,0);
lcd_string("已插入SLE4428");
}
else
{
lcd_pos(1,0);
lcd_string("卡不正确 ");
SLE4428_Deactivation();
delay(1000);
goto A;
}
8) IC卡正确插入,则显示“用户代码为: XXXXXXXXXX ,等待按下键盘“ A”键;
lcd_pos(2,0);
lcd_string("用户代码为:");
SLE4428_ReadData(0x15,UserCode,6);
lcd_pos(3,0);
for(UINT8 i=0;i<6;i++)
lcd_Hex(UserCode[i]) ;
while(KEY_ReadValue()!=‘A‘);
lcd_wcmd(0x01);
9) 按下“A”键,第一行显示“按-A键校验密码”,第二行显示“校验0xFF,0xFF ”,等待“A”键按下。
lcd_pos(0,0);
lcd_string("按-A键校验密码");
lcd_pos(1,0);
lcd_string("校验0xFF,0xFF");
while(KEY_ReadValue()!=‘A‘);
10) 按下“A”键,若密码正确第三行显示“校验成功”,否则显示“校验失败”。第四行显示剩余机会:X次,等待“A”键按下:
lcd_pos(2,0);
if(SLE4428_PassWord(0xFF,0xFF)==1)
lcd_string("校验成功!");
else
{lcd_string("校验失败!"); return 0;}
lcd_pos(3,0);
switch(SLE4428_ReadByte(0x03fd))
{
case 0xff: lcd_string("剩余机会 8次");break;
case 0x7f: lcd_string("剩余机会 7次");break;
case 0x3f: lcd_string("剩余机会 6次");break;
case 0x1f: lcd_string("剩余机会 5次");break;
case 0x0f: lcd_string("剩余机会 4次");break;
case 0x07: lcd_string("剩余机会 3次");break;
case 0x03: lcd_string("剩余机会 2次");break;
case 0x01: lcd_string("剩余机会 1次");break;
case 0x00: lcd_string("剩余机会 0次");break;
default: break;
}
while(KEY_ReadValue()!=‘A‘);
B段程序:
11) 按下“A”键,第一、二、三行分别显示“加密解密实验”,“ 1. 加密”,“ 2. 解密”三个选项。等待按键1或2按下:如果“1”按下,跳转至加密程序段,如果“2”按下,跳转至解密程序段;
lcd_wcmd(0x01);
lcd_pos(0,0);
lcd_string("加密解密实验");
lcd_pos(1,0);
lcd_string("1.加密");
lcd_pos(2,0);
lcd_string("2.解密");
do
{
C=KEY_ReadValue();
}
while(C!=‘1‘&&C!=‘2‘);
lcd_wcmd(0x01);
if(C==‘1‘) goto jiami;
else if(C==‘2‘) goto jiemi;
else ;
加密程序段:
12) 第一行显示“ 查看串口调试助手”,第二行显示“A键确认加密”,串口发送字符“将加密以下数据:”,并将加密前的数据发送至PC机,换行。串口继续发送“加密密钥:”,并将加密密钥数组发送至PC机,等待“A”键按下;
lcd_pos(0,0);
lcd_string("查看串口调试助手");
lcd_pos(1,0);
lcd_string("A 键确认加密");
UART_SendString("将加密以下数据:\r\n");
for(UINT8 i=0;i<16;i++)
{
UART_SendHex(jiamiqian[i]);
}
UART_SendString("\r\n");
UART_SendString("加密密钥:\r\n");
for(UINT8 i=0;i<16;i++)
{
UART_SendHex(jiamimiyue[i]);
}
UART_SendString("\r\n");
while(KEY_ReadValue()!=‘A‘);
13) SM1 初始化;
SM1_Init(jiamimiyue);
14) 开始 SM1 加密;
SM1_Crypto(jiamiqian, 16, 0, 0, 0,jiamihou);
15) 关闭 SM1 加密;
SM1_Close();
16) 串口发送“加密后的数据:”,并将加密后的数据发送至PC机, 换行。第三行显示“ 加密完成”,第四行显示“A键存入IC卡”。当“A”键按下后,向 SLE4428 IC卡发送加密后的数据, 串口发送“已将数据写入IC卡”。
UART_SendString("加密后的数据:\r\n");
for(UINT8 i=0;i<16;i++)
{
UART_SendHex(jiamihou[i]);
}
UART_SendString("\r\n");
lcd_pos(2,0);
lcd_string("加密完成");
lcd_pos(3,0);
lcd_string("A键存入IC卡");
while(KEY_ReadValue()!=‘A‘);
for(UINT8 i=0;i<16;i++)
{
SLE4428_Write_Byte(0x20+i,jiamihou[i]);
}
UART_SendString("已将数据写入IC卡。\r\n");
UART_SendString("\r\n");
goto B;
解密:
17) 初始化 SM1 ;
SM1_Init(jiemimiyue);
18) SM1 解密;
SM1_Crypto(jiemiqian, 16, 1, 0, 0,jiemihou);
19) 关闭 SM1 ;
SM1_Close();
20) 第二行“ 解密完成”,第三行“ A键返回”,串口显示 “解密后的数据为:”,按下“A”键,跳转至B段程序。
lcd_pos(1,0);
lcd_string("解密完成");
lcd_pos(2,0);
lcd_string("A键返回");
UART_SendString("解密后的数据为:\r\n");
for(UINT8 i=0;i<16;i++)
{
UART_SendHex(jiemihou[i]);
}
UART_SendString("\r\n");
UART_SendString("\r\n");
while(KEY_ReadValue()!=‘A‘);
goto B;
2019-2020-1 20175221 20175225 20175226 实验二 固件程序设计
原文:https://www.cnblogs.com/zxja/p/11843586.html