初识区块链
前言没有安全,何谈财富?
定义区块链由一个共享的,容错的分布式数据库和多节点网络组成。也就是说,区块链其实就是一个多方参与的加密分布式账本。这里面有四个关键词:多方参与、加密、分布式、记账本。
记账本
这个账本就像我们的银行账户一样,比如今天往卡里存了多少钱,又花了多少等等,这些都是有记账的。就拿比特币交易的例子来说,一笔比特币交易完成之后,比特币的区块链上就会记住你购进多少的比特币的流水,这些条目会在你的账户中,你的账户就是一个账本。
但这个账本不是普通的账本,它是多方参与的账本。这意味着这个账本不是一个人记账的,也不是一个中心化机构去记的,而是由分散在全球各个角落的人去记的。甚至会借助于卫星系统。因此,无论你分布在世界的哪个角落,只要有一台电脑,就可以进入这个数据库,查看某某人做了什么交易等等。
加密
加密是通过密码学的一种手段,保证你的数据不会篡改。这就和现在我们去银行转账,他们通常会给你一个U盾一样,这个U盾就相当于你账户的一把钥匙,只有拥有钥匙的人才能操作这个账户,才能进行转账。
在区块链里面也有这个概念。你在区块链开户的时候,系统会自动创建一把钥匙,有了这个钥匙才可以操 ...
C语言入门
数据类型包括
基本类型(以二进制补码形式存储)
整型
短整型:short-2字节
整型:int-4字节
长整型:long-4/8字节(取决于32/64位机)
浮点型
单精度-4字节
双精度-8字节
字符型
char-1字节(存储字符ASCII值)
枚举类型enum
在“枚举”类型的定义中列举出所有可能的取值, 被说明为该“枚举”类型的变量取值不能超过定义的范围。该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。
枚举类型定义
123456enum 枚举名{ 枚举元素1, 枚举元素2, ...};enum 枚举名 枚举变量;
eg
12345678910enum day{ Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};enum day d;
注意点
枚举元素的值取决于定义时各枚举元素排列的先后顺序。默认情况下,第一个枚举元素的值为0,第二个为1,依次顺序加1。
1234567enum Season ...
SSTF(Hacker's Playground)
前言第一次打CTF,crypto的Tutorial部分涉及两题,RSA101和RC Four,结果是一题也没整出来。。好歹也是研究了一下午的真题,决定在比赛结束后看看大佬写的write up
链接传送门
正文RSA101题目如下
题目的代码如下
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758from base64 import b64encode, b64decodefrom Crypto.Util.number import getStrongPrime, bytes_to_long, long_to_bytesfrom os import systemp = getStrongPrime(512)q = getStrongPrime(512)n = p * qe = 65537d = pow(e, -1, (p - 1) * (q - 1))print("[RSA parameters]")pr ...
CTF之常见密码学攻击手法和实现
题目均来源CTF
通过了解CTF中常见和以前奇葩题型,有助于我们学习更多的内容
关于rsa的一些基础知识之前就有写过啦,这篇直接开始做题 O(∩_∩)O
已知p,q,e 求d题目RSA如下
直接带入即可
1234567import gmpy2p=473398607161q=4511491e=17fai=(p-1)*(q-1)d=gmpy2.invert(e,fai)print('d=',d)
输出结果
1d= 125631357777427553
所以答案套个flag{}
1flag{125631357777427553}
已知p,q,e,c 求m题目rsarsa如下
求解,比上一题多一个步骤而已
123456789101112import gmpy2p = 96484230290105156765905517400104265349457376392357398006439893520398525072984913995610350091634270503701075707336333509116912802977771602006252 ...
消息认证与数字签名
数字签名验证实验定义数字签名,又称公钥数字签名、电子签章,是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,一个用于验证。简单地说,所谓数字签名就是附加在原来数据上一些数据或者对原来数据做一些密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。
基于公钥密码体制和私钥密码体制都可以获得数字签名,主要是基于公钥密码体制的数字签名。包括普通数字签名和特殊数字签名。
普通数字签名算法:RSA、ElGamal、Fiat-Shamir、Guillou-Quisquarter、Schnorr、Ong-Schnorr-Shamir数字签名算法、Des/DSA、椭圆曲线数字签名算法、有限自动机数字签名算法
特殊数字签名:盲签名、代理签名、群签名、不可否认签名、公平盲签名、门限签名、具有消息恢复功能的签名
功能保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生
解释:数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送 ...
哈希函数算法实现原理和应用
hash,一般翻译做“散列”,也有直接音译为”哈希”
就是把任意长度的输入通过散列算法,变换成固定长度的输出,该输出就是散列值。
MD(Message Digest ),为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。目前广泛使用的是第五版,因此也被称为MD5。
MD5和SHA1可以说是目前应用最广泛的Hash算法,而它们都是以MD4为基础设计的。
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。
举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
MD5加解密在线网站MD5在线加密/解密/破解—MD5在线 (sojson.com)
明文是2021加密后
选取任意一组密文 进行解密
但是稍微复杂一点的字母就解不出来了唉
Hash ...
现代密码之对称算法
现代密码学的任务不仅仅只限于传统密码学的“保密通信”,而是含义更广的“信息安全”,其中包括“保密通信”、“数据加密”、“数字签名”等重要的功能。现代密码学已成为信息时代无处不在不可或缺的信息安全卫士。
现代密码学的安全性主要由密钥的设计和使用决定。
按技术特征,现代密码学分为三类:
对称算法、非对称算法、摘要算法
今天主要讲讲对称算法0w0
对称算法
又称传统密码算法、秘密密钥算法或单密钥算法。加密与解密密钥一样的密码算法。该算法又分为序列密码(流密码)算法、分组密码算法
序列密码算法序列密码也称为流密码,它是对称密码算法的一种。序列密码具有实现简单、便于硬件实施、加解密处理速度快、没有或只有有限的错误传播等特点。
在实际应用中,特别是专用或机密机构中保持着优势,典型的应用领域包括无线通信、外交通信。
1949年Shannon证明了只有一次一密的密码体制是绝对安全的,这给序列密码技术的研究以强大的支持,序列密码方案的发展是模仿一次一密系统的尝试。那神马是一次一密呢?
1、密钥和加密的消息等长
2、密钥由真正随机符号组成
3、密钥只用一次,永不对其他消息复用
这就像在一天的24小时之 ...
那些脑洞大开的加密
古典密码可以分为换位加密和替换加密
其中,替换加密可以分为单表替代密码和多表替代
换位加密对明文字符或字符组进行位置移动的密码
明文的字母顺序被打乱了,但明文字母本身不变
栅栏密码(Rail-fence Cipher)栅栏密码是一种简单的移动字符位置的加密方法,规则简单,容易破解
把要加密的明文分成n组,然后把每一组的第2个字符、第2个字符等依次连起来,最后把他们全部连接起来就是密文。栅栏密码又分为传统栅栏和w型栅栏
传统栅栏密码明文
1WEAREDISCOVEREDFLEEATONCE
每组字数为5,按照字数把明文分成:
12345WEAREDISCOVEREDFLEEATONCE
分别取每组第一个字符等连接后
1WDVFTEIELOASRENRCEECEODAE
传统传送门
w型栅栏密码W型栅栏密码加密的方法中,明文由上至下顺序写上,当到达最低部时,再回头向上,一直重复直至整篇明文写完为止
明文
1WEAREDISCOVEREDFLEEATONCE
加密
123W . . . E . . . C . . . R . . . L . . . T . . . E. E . R . D ...
编码入门总结
前言编码—隐匿在计算机背后的语言。在计算机眼里读到的所有文字都是由0和1组成的字符串,为了能让汉字正常显示在屏幕上,我们需要做以下两件事情:
1、给所有的汉字一个独一无二的数字编号,做一个数字编号到汉字的mapping关系(即字符集)2、把这个数字编号能用0和1表示出来
第2件事情并不是直接把数字编号用二进制表示出来那么简单,还要处理多个字连在一起的时候如何做分隔的问题。第2件事情通常解决方案要么就是规定好每个字长度(例如所有文字都是2bytes,不够的前面用0补齐),要么就是在用0和1表示的时候,不仅需要表示出数字编码,还要暗示给计算机接下来多少个连续byte构成一个字。
进入编码定义编码是信息从一种形式或格式转换为另一种形式的过程。解码,是编码的逆过程。
关系这是几种常见的中文编码之间的兼容性(子集=同时存在也不冲突=不会出现乱
从中我们可以看到ASCLL的兼容性是最好的,而UTF-8与它部分没有交集,这也是平常会出现乱码的原因。
分类ASCLL编码ASCII编码每个字母或符号占1byte(8bits),并且8bits的最高位是0。通常所说的标准ASCII只有前128个值!( ...
RSA公钥文件解密的分析
前言今天,手一抽打开了这个网站并注册登录
(一个早上看奥运会碌碌无为
我想就顺便试试水吧)
先做的是easy_RSA,已经把d算出来了,可是提交显示不对..仔细看了题目的要求后..说:flag格式为cyberpeace{小写的你解出的答案}。我以为这是把答案转化成cyberpeace格式…上网搜索“在线cyberpeace转化”未果,才知道原来答案要带上这一串英文啊..
然后,我又手一抽,点到了下一题..然鹅计时已经开始
啊?都是乱码,没有n,e,c咋解呢这
于是乎,复制了BEGIN PRIVATE KEY到浏览器搜索,顺其自然地开始了我对rsa公钥文件解密的study(
解密提n,e这时候我们有如下的publickey.pem文件:
——-BEGIN PUBLIC KEY——-MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMJjauXD2OQ/+5erCQKPGqxsC/bNPXDryigb/+l/vjDdAgMBAAE=——-END PUBLIC KEY——-
现在我们需要做的就是从这段字符串中提出n和e
pem后缀OpenSSL 使用 PEM ...