目录

前言:

一、初遇铜锁

自我总结:

1、环境搭建,一次难忘的经历

2、键盘敲出的每一个命令,都是最美的音符

二、SM3杂凑算法增强改造

三、艺术源于生活

四、对开放原子开源基金会的感受

前言:

说实话在进行铜锁探密之前,我对密码最初的概念还保留在,我们登录QQ或者微信输入的“密码”。当老师和我说,那是口令而不是密码时,老师接下来讲的东西成功引起了我的注意。因此处于好奇,我去网上搜了下什么叫密码学?然后它大概是这么说的。

[密码学(在西欧语文中,源于希腊语kryptós“隐藏的”,和gráphein“书写”)是研究如何隐密地传递信息的学科。在现代特别指对信息以及其传输的数学性研究,常被认为是数学和计算机科学的分支,和信息论也密切相关。著名的密码学者Ron Rivest解释道:“密码学是关于如何在敌人存在的环境中通讯”,自工程学的角度,这相当于密码学与纯数学的异同。密码学是信息安全等相关议题,如认证、访问控制的核心。密码学的首要目的是隐藏信息的涵义,并不是隐藏信息的存在。密码学也促进了计算机科学,特别是在于电脑与网络安全所使用的技术,如访问控制与信息的机密性。密码学已被应用在日常生活:包括自动柜员机的芯片卡、电脑使用者存取密码、电子商务等等。

密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。密码在早期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。]

说实话,这番解释,给密码又增加了一份神秘的色彩。因此就在想,现存的密码算法真的是那么的严谨和完美嘛?当学到SM3杂凑算法时,我顿时非常感兴趣了,因为SM3杂凑算法是一种不可逆的算法,意思是只能加密,不能被反向解密。但当我深入了解SM3杂凑算法时,好像事情变的有趣了起来。

一、初遇铜锁

自我总结:

初见铜锁,想放弃,但心有不甘。初极狭,后豁然开朗。从搭建铜锁环境用了差不多半天时间,到后面捣鼓快忘记的C语言,想说,我失去的青春好像回来了。又回到大学课堂,老师带我捣鼓C语言,捣鼓单片机等。

1、环境搭建,一次难忘的经历

打开手册,开头的实验的环境说明,让我重新回到使用小红帽、centos敲命令的时光。其实个人很喜欢linux系统,也很喜欢Ubuntu。这些系统启动起来特别快,运行程序也比较安全可靠。就是那些命令老是有点记不住,因此还是比较喜欢Windows的图形化界面。

因为看到可以通过在Windows里面安装Docker环境,实现安装虚拟机的过程,因此准备捣鼓捣鼓一番。说实话,因为公司不常用Docker,在开始学习营之前我只是知道Docker是个容器,相当于一个隔离版的虚拟机。不仅可以跨系统安装很多好玩的,而且不像虚拟机那样占用大量的资源。其实个人理解docker就是一个简单的进程,就如下图所示docker就是一个进程级别的。

Docker 是一个黑盒的进程,区别于传统的进程,Docker 可以独立出一个自己的空间,不会使得在 Docker 中的行为以及变量溢出到宿主机上。因此这次Docker环境搭建,让我打开了新世界的大门,让我彻底难忘Docker。

2、键盘敲出的每一个命令,都是最美的音符

在前面说到铜锁学习需要使用到类似Docker的环境,因此我就开始找很多关于Docker的资料,比如Docker到底是干什么的?Docker有什么用?通过类似下面一张张Docker的图解让我知道为啥Docker会深受开发者的喜欢了。

虽然安装Docker 时,参考了旧的教程导致自己走了一些弯路,如Docker 其实不需要开启Hyper-V,其实wls2更适合Docker。但在键盘中每一次次调试和敲击,让我认识到学无止境、不进则退。

在安装好Docker后,正式进入了铜锁的学习,按照手册开始一步步的进行实战,让我学会了实战SM4加解密算法的一些原理。但当我在PowerShell中,不断重复输入“echo -n "hello tongsuo" | /opt/tongsuo/bin/tongsuo dgst -sm3 ”命令时,发现每次返回的结果都是一样的。因此我开始萌发了一个大胆的想法。

二、SM3杂凑算法增强改造

前面我们提到,当我敲同一条SM3杂凑算法加密时发现,每次返回的结果是一样的时候,我从开始的好奇,陷入了沉思。因为在大量的项目实践中,我认识到,人们常用的密码都类似123456,abc123之类的。因为我用计算机记住常用密码 如123456,abc123的杂凑加密值。然后拥有用户档案的数据库查询权限,不就可以暴力破解用户的账号了。

此时我在想如果我是企业老板,我肯定不希望我的员工知道公司客户的密码的。因此我希望在数据库中即便不同用户设置了一样的密码。但保持至数据库的值也是不一样的。因此我开始了我大胆的猜想和增强改造。

三、艺术源于生活

SM3杂凑算法增强改造的灵感来源家里的智能锁,智能锁有个模式就是前面不管你随便输入多少位密码,只需要在按*键后,再输入正确的密码就可以打开门了。这样即便每次看上去输入的密码都是不一样的,但是每次都能成功打开智能门。

因此我在SM3杂凑算法中,加个了几个随机数,如在SM3杂凑加密值的前4位拼接4为随机数,第16-20位拼接5位随机数。然后再保存到数据库,这样即便是同样的密码,在数据库中保存的值也都是不一样的。因此即可拿到了数据库的查询值也是很难去暴力枚举破解用户的密码的。因此就将SM3杂凑算法进行了改造,类似部分改造源码如下。

#include <openssl/evp.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
static int sm3(const unsigned char *in, size_t inlen, unsigned char *out)
{EVP_MD_CTX *mctx = NULL;if ((mctx = EVP_MD_CTX_new()) == NULL|| !EVP_DigestInit_ex(mctx, EVP_sm3(), NULL)|| !EVP_DigestUpdate(mctx, in, inlen)|| !EVP_DigestFinal_ex(mctx, out, NULL)) {EVP_MD_CTX_free(mctx);return 0;}EVP_MD_CTX_free(mctx);return 1;
}
int main()
{
//增加4位随机数,保存至数据库的SM3值时,将生成的4位随机数拼接在SM3杂凑值前面,其他的类似
int num[4], cnt = 0, n;
srand(clock()); // 设置随机数种子
while (cnt < 4)
{
n = rand() % 4; // 生成4以内随机数,这样更利于测试
for (int i = 0; i < cnt; i++)
if (num[i] == n) // 遍历数组,有相同的重新生成随机数
continue;
num[cnt++] = n;
}
for (int i = 0; i < cnt; i++) // 打印随机数数组
printf("%d ", num[i]);
return 0;unsigned char in[] = "hello tongsuo";unsigned char out[EVP_MAX_MD_SIZE];int ret;ret = sm3(in, strlen(in), out);assert(ret == 1);for (int i = 0; i < EVP_MD_size(EVP_sm3()); i++)printf("%x", out[i]);printf("\n");return 0;
}
// gcc sm3.c -I/opt/tongsuo/include -L/opt/tongsuo/lib64 -lcrypto -Wl,-rpa
th=/opt/tongsuo/lib64

通过代码库,将自己的想法和代码提交进去了,也让自己学开源贡献了一份微薄的力量。因此在本次训练营学习中,学到了新工具,也表达了自己的新想法,真是Nice!

四、对开放原子开源基金会的感受

作为国内知名的开源基金会,我还是很憧憬的,因为在IT界,总是被其他国家拿捏住了IT新技术、新科技的标准和话语权。我们不能完全学老美的玩法,我们要建立一种中国特色的开源基金会。中国IT人员是非常的庞大的,个人建议开源基金会可以从以下几个方面下手。

1、建立开源基金会的领袖羊群效应,树立几个优秀的开源项目和开源贡献者。

2、多与企业、学校进行深入合作,让企业或学校深入应用开源产品。并不断迭代开源项目。

3、定期举办相应的开源基金会活动,活跃基金会。

4、通过自媒体加大基金会的宣传力度,让更多的人知道了解开源基金会,并加入进来。

最后祝开放原子开源基金会能成为国内乃至全球顶尖的基金会。

开放原子训练营(第一季)铜锁探密,SM3杂凑算法加强至pro版相关推荐

  1. sm3算法实现java_[转]国密SM3杂凑算法与实现

    国密办已于去年公布国产商密算法SM3,http://www.oscca.gov.cn/News/201012/News_1199.htm,这给其应用和开发带来了方便,也见网上有许多实现的例子,出于一个 ...

  2. 国密算法 SM2公钥密码 SM3杂凑算法 SM4分组密码 python代码完整实现

    包含SM2公钥密码.SM3杂凑算法和SM4分组密码的国密算法完整工具包完成了.此前分别发布过上述三个算法的代码: SM2:国密算法 SM2 公钥加密 非对称加密 数字签名 密钥协商 python实现完 ...

  3. 国密算法SM3(杂凑算法)

    国家密码管理局关于发布<SM3密码杂凑算法>公告 SM3密码杂凑算法 JavaScript对本算法的一个实现:https://github.com/wcube/sm-crypto

  4. 开放原子训练营(第一季)铜锁探密 基于铜锁构建Web在线加密工具库(Go + React)

    简介 本文记录我参加开放原子训练营(第一季)铜锁探密活动,学习铜锁密码库和国密加密算法后,完成的小作品. 先简单介绍一下作品内容: Web在线加密工具库是一种提供加密算法在线使用的工具库,可以帮助用户 ...

  5. 【2023 · CANN训练营第一季】——Ascend C算子开发入门——第一次课

    前言:昇腾AI处理器的算子开发增加了一种新的方式,称之为TIK2,正式名称是Ascend C算子开发.不同于采用Python的DSL和TIK方式,Ascend C使用C/C++作为前端语言的算子开发工 ...

  6. 国密SM3密码杂凑算法原理及实现(附源码)

    相关文章: 国密SM3哈希算法原理及实现(附源码) SHA1哈希算法原理及实现(附源码) MD5哈希算法原理及实现(附源码) MD4哈希算法原理及实现(附源码) MD2哈希算法原理及实现(附源码) M ...

  7. 开放原子训练营(第二季)RT-Thread Nano学习营学习有感

    介绍 前几天有幸收到C站的训练营学习邀请,了解到这两天即将举行的开放原子 RTT 训练营.博主算是一名嵌入式方向的小白,主要还是在裸机上进行开发,但对嵌入式的操作系统和实时系统很感兴趣.在这次学习训练 ...

  8. 【2023·CANN训练营第一季】昇腾AI入门课(TensorFlow)学习总结

    最近AI可是非常火爆,ChatGPT成为互联网领域最大的风口,带来了各个行业的焦点,也产生了很多场景的AI应用,这将改变人与工具的交互方式,为我们生活提供更便捷的服务.        此次正好报名参加 ...

  9. 开放原子训练营(第三季)inBuilder低代码开发实验室:货运单的开发

    开放原子开源基金会(OpenAtom Foundation),是一个非盈利组织,致力于推广开源技术和开放创新.其宗旨是倡导合作伙伴间的信息共享和资源共享,鼓励开源社区的创造性和互助精神.该基金会提供资 ...

最新文章

  1. Mac OS X中MacPorts安装和使用
  2. Ice笔记--C++线程与并发(二)
  3. 云信私有化方案中如何搭建高可用的日志和监控平台?
  4. LeetCode 1935. 可以输入的最大单词数
  5. 【剑指offer】面试题16:数值的整数次方(Java)
  6. 基于类和对象的高精度算法封装
  7. 海量个人信息被泄漏 央视首次曝光智能呼叫机器人
  8. 红外接收器c语言软件,红外线遥控解码接收程序_C语言.doc
  9. mysql 主从 不一致_揭秘MySQL主从数据不一致
  10. linux下用到的软件
  11. gif 动态加载_用 python 实现切割视频,加入水印,压缩并转成 gif !
  12. 模拟经营游戏框架构思
  13. FASTQ 格式说明
  14. pytorch学习第三天: 阿里云物联网平台使用
  15. ubuntu 8.04玩魔兽争霸
  16. 网络基础一(物理层)
  17. Java入门-机票购买、座舱等级、淡旺季计算价格
  18. html怎么修改版权信息,微擎修改免费版标题、logo、页脚版权信息教程(仅供学习)...
  19. POI 导出Excel
  20. 物联网温湿度显示控制项目(网页、Android双端显示搭载linux平台网关MQTT通信)

热门文章

  1. matlab画爱心的代码
  2. 畅想计算机的未来50字,新学期畅想50字
  3. 国庆放假前一周,再学这些技术,安安稳稳过假期
  4. 3分钟了解今日头条推荐算法原理
  5. scale-free
  6. 洛谷题单难题总结——数组
  7. pythondjango教程_【秒懂】号称最为简明实用的Django上手教程
  8. 统一诊断服务(UDS)- 安全等级是怎么回事儿
  9. 荣耀v40和华为Nova8pro哪个好 华为Nova8pro和荣耀v40的区别
  10. Fiddler安装与配置