钱包(Wallet)
钱包是一个管理私钥的工具,数字货币钱包形式多样,但它通常包含一个软件客户端,允许使用者通过钱包检查、存储、交易其持有的数字货币。它是进入区块链世界的基础设施和重要入口。
冷钱包(Cold Wallet)
冷钱包是一种脱离网络连接的离线钱包,将数字货币进行离线储存的钱包。使用者在一台离弦的钱包上面生成数字货币地址和私钥,再将其保存起来。冷钱包是在不需要任何网络的情况下进行数字货币的储存。
热钱包(Hot Wallet)
热钱包是一种需要网络连接的在线钱包,在使用上更加方便。但由于热钱包一般需要在线使用,个人的电子设备有可能因误点钓鱼网站被黑客盗取钱包文件、捕获钱包密码或是破解加密私钥,而部分中心化管理钱包也并非绝对安全。
公钥(Public Key)
公钥是和私钥成对出现的,和私钥一起组成一个密钥对,保存在钱包中。公钥由私钥生成,但是无法通过公钥倒退得到私钥。公钥能够通过一系列算法运算得到钱包的地址,因此可以作为拥有这个钱包地址的凭证。
私钥(Private Key)
私钥是由遗传由随机算法生成的数据,它可以通过非对称加密算法算出公钥,公钥可以再算出币的地址。私钥是非常重要的,作为密码,除了地址的所有者之外,都被隐藏。区块链资产实际在区块链上,所有者实际只拥有私钥,并通过私钥对区块链的资产拥有绝对控制权。
助记词(Mnemonic)
由于私钥是一长串毫无意义的字符,比较难以记忆,因此出现了助记词。助记词是利用固定算法,将私钥转换成十多个常见的英文单词。助记词和私钥是互通的,可以相互转换,它只是作为区块链数字钱包私钥的友好格式。助记词即私钥!(由于它的明文性,不建议它以电子方式保存,而是抄写在物理介质上保管好,它和Keystore作为双重备份互为补充)
Keystore
Keystore主要在以太坊钱包APP中比较常见,是把私钥通过钱包密码再加密得来的,与助记词不同,一般可保存为文本或JSOC格式存储。Keystore需要钱包密码解密后才等同于私钥。因此,Keystore需要配合钱包密码来使用,才能导入钱包。
公链(Public Blockchain)
公有链简称公链,是指全世界任何人都可随时进入读取、任何人都能发送交易且能获得有效确认的共识区块链。公链通常被认为是完全去中心化的,链上数据都是公开透明的,不可更改,任何人都可以通过交易或挖矿读取和写入数据。
交易所(Exchange)
与买卖股票的证券交易所类似,区块链交易所即数字货币买卖交易的平台。数字货币交易所又分为中心化交易所和去中心化交易所。
去中心化交易所:交易行为直接发生在区块链上,数字货币会直接发回使用者的钱包,或是保存在区块链上的只能合约。这样直接在链上交易的好处在于交易所不会持有用户大量的数字货币,所有的数字货币会储存在用户的钱包或平台的智能合约上。去中心化交易都过技术手段在信任层面去中心化,也可以说是无需信任,每笔交易都通过区块链进行公开透明,不负责保管用户的资产和私钥等信息,用户资金的所有权完全在自己手上,具有非常好的个人数据安全和隐私性。
中心化交易所:目前热门的交易所大多都是采用中心化技术的交易所,使用者通常是到平台上注册,并经过一连串的身份认证程序(KYC)后,就可以开始在上面交易数字货币。用户在使用中心化交易所时,其货币交换不见得会发生在区块链上,取而代之的可能仅是修改交易所数据库内的资产数字,用户看到的只是账面上数字的变化,交易所只要在用户提款时准备充足的数字货币可供汇出即可。
节点(Node)
区块链就是去中心化的分布式数据库,是由千千万万个“小服务器”组成。区块链网络中的每一个节点,就相当于存储所有区块数据的每一台电脑或者服务器。所有新区块的生产,以及交易的验证与记账,并将其广播给全网同步,都由节点来完成。节点分为“全节点”和“轻节点”,全节点就是拥有全网所有的交易数据的节点,轻节点就是只拥有和自己相关的交易数据节点。
RSA
用wireshark打开pub.key文件
将公钥进行解析得到n,e
分解n,得到p和q
写一个脚本
import gmpy2
import rsa
p=285960468890451637935629440372639283459
q=304008741604601924494328155975272418463
n=86934482296048119190666062003494800588905656017203025617216654058378322103517
e=65537
d = gmpy2.invert(e,(q-1)*(p-1))
key = rsa.PrivateKey(n,e,d,p,q)
with open("flag.enc的路径","rb") as f:
print(rsa.decrypt(f.read(),key).decode())
得到flag
rsa
分解n
然后求出d
d=gmpy2.invert(e,(q-1)*(p-1))
运行程序,发现报错了
然后改一下代码
import hashlib
import gmpy2
N = 101991809777553253470276751399264740131157682329252673501792154507006158434432009141995367241962525705950046253400188884658262496534706438791515071885860897552736656899566915731297225817250639873643376310103992170646906557242832893914902053581087502512787303322747780420210884852166586717636559058152544979471
e = 46731919563265721307105180410302518676676135509737992912625092976849075262192092549323082367518264378630543338219025744820916471913696072050291990620486581719410354385121760761374229374847695148230596005409978383369740305816082770283909611956355972181848077519920922059268376958811713365106925235218265173085
p=9046853915223503351787031888977627106934564043204783593118678181991596316582877057556463152579621699010610569526573031954779520781448550677767565207407183
q=11273732364123571293429600400343309403733952146912318879993851141423284675797325272321856863528776914709992821287788339848962916204774010644058033316303937
d=gmpy2.invert(e,(q-1)*(p-1))
flag = "flag{" + hashlib.md5(hex(d).encode("utf8")).hexdigest() + "}"
print(flag)
得到的flag不知道为什么不对,区分大小写和不区分大小写都不对???
密码学的心声
曲谱中提到的埃塞克码应该就是ASCII码,八进制
将数字三个一组
111 114 157 166 145 123 145 143 165 162 151 164 171 126 145 162 171 115 165 143 150
l = [111,114,157,166,145,123,145,143,165,162,151,164,171,126,145,162,171,115,165,143,150]
r = ''
for i in l:
i = str(i)
r += chr(int(i,8))
print(r)
flag{ILoveSecurityVeryMuch}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)