当前位置:网站首页>Rust blockchain development - signature encryption and private key public key
Rust blockchain development - signature encryption and private key public key
2022-07-05 03:59:00 【He who knows what comes will go against it】
Signature and encryption
1. Use the private key and encrypt the information , Then decrypt the information with the public key , It's mathematical signature , The meaning of signature is to ensure that the source of information is the private key holder .
2. Use public key encryption , Private key decryption , Encrypted transmission , It is to ensure that only the private key holder can decrypt and read the information even if it is exposed .
3. To implement signature or encryption , There are generally three steps , Key pair generation algorithm , Private key signature algorithm , Public key verification algorithm .
Code example
1.Rust Provides crypto library , It realizes the symmetric password commonly used in cryptography 、 Public key password 、 One way hash function 、 Message authentication code 、 digital signature 、 Random number generator and other algorithms .
2. The signature here needs ed25519 This man's algorithm .
rely on
[dependencies]
rust-crypto = "^0.2"
secp256k1 = "0.23.1"
hex = "0.4.3"
sha256 = "1.0.3"
Sign information
fn sign(seed_key : String,content:String) -> ([u8;64],[u8;32],[u8;64])
{
let seed_bytes = digest_bytes(seed_key.as_bytes());
let seed_u8 = hex::decode(seed_bytes).expect("Invalid Hex String");
let mut seed: [u8;32] = [0u8;32];
let mut i = 0;
for val in seed_u8
{
seed[i] = val;
i = i+ 1;
}
let (private_key, public_key) = keypair(seed.as_ref()); //[U8,64]
let sig = signature(content.as_bytes(), &private_key); //[U8,64]
(private_key,public_key,sig)
}
Verify the signature
let seed = "3nuhx-7yzml-5uet3-7eplx-kq4u5-roww3-zf6ju-vdvaf-s7q4u".to_string();
let content = "13445927681169508792";
let (private_key,public_key,signature) = sign(seed, content.to_string());
print!("private key = {:?},\npublic key = {:?},\nsignature = {:?} \n",private_key,public_key,signature);
print!("verify = {:?}",verify(content.as_bytes(), &public_key, &signature));
private key = [189, 205, 57, 2, 52, 206, 172, 150, 110, 248, 19, 146, 86, 244, 107, 190, 49, 227, 130, 188, 139, 207, 157, 94, 226, 25, 27, 15, 172, 38, 160, 108, 19, 100, 112, 203, 240, 28, 155, 193, 252, 17, 194, 53, 43, 146, 165, 135, 131, 100, 154, 142, 226, 120, 180, 51, 203, 162, 168, 38, 156, 49, 115, 95],
public key = [19, 100, 112, 203, 240, 28, 155, 193, 252, 17, 194, 53, 43, 146, 165, 135, 131, 100, 154, 142, 226, 120, 180, 51, 203, 162, 168, 38, 156, 49, 115, 95],
signature = [222, 13, 90, 4, 73, 2, 58, 240, 183, 110, 19, 120, 251, 76, 219, 9, 125, 151, 156, 218, 3, 12, 237, 209, 3, 237, 176, 152, 42, 201, 186, 113, 79, 66, 6, 249, 245, 232, 102, 29, 54, 184, 249, 31, 49, 135, 226, 164, 158, 245, 76, 213, 36, 191, 161, 44, 122, 132, 47, 221, 172, 46, 144, 1]

3. Turn the signature into String Output .
fn au8_to_string(signature_code : [u8;64]) ->String
{
use std::fmt::Write;
let mut signature_string = String::new();
for a in signature_code.iter()
{
write!(signature_string, "{:02x}", a);
}
signature_string
}
"de0d5a0449023af0b76e1378fb4cdb097d979cda030cedd103edb0982ac9ba714f4206f9f5e8661d36b8f91f3187e2a49ef54cd524bfa12c7a842fddac2e9001"
边栏推荐
- 3. Package the bottom navigation tabbar
- On the day 25K joined Tencent, I cried
- 为什么百度、阿里这些大厂宁愿花25K招聘应届生,也不愿涨薪5K留住老员工?
- grandMA2 onPC 3.1.2.5的DMX参数摸索
- DMX parameter exploration of grandma2 onpc 3.1.2.5
- [wp]bmzclub writeup of several questions
- Test d'automatisation de l'interface utilisateur télécharger manuellement le pilote du navigateur à partir de maintenant
- Online sql to excel (xls/xlsx) tool
- Multimedia query
- MindFusion.Virtual Keyboard for WPF
猜你喜欢
![[web Audit - source code disclosure] obtain source code methods and use tools](/img/ea/84e67a1fca0e12cc4452c744c242b4.png)
[web Audit - source code disclosure] obtain source code methods and use tools

Resolved (sqlalchemy+pandas.read_sql) attributeerror: 'engine' object has no attribute 'execution_ options‘

error Couldn‘t find a package.json file in “你的路径“

JVM garbage collection

【web審計-源碼泄露】獲取源碼方法,利用工具

一文带你了解BI的前世今身与企业数字化转型的关系

3. Package the bottom navigation tabbar

Wechat applet development process (with mind map)

我就一写代码的,王总整天和我谈格局...

Thread Basics
随机推荐
Clickhouse物化视图
C # use awaiter
Enterprise level: spire Office for . NET:Platinum|7.7. x
天干地支纪年法中为什么是60年一个轮回,而不是120年
Pyqt5 displays file names and pictures
Official announcement! The third cloud native programming challenge is officially launched!
MindFusion.Virtual Keyboard for WPF
Interview byte, pass the exam and directly work on three sides. As a result, I found an architect to hang me?
Containerd series - detailed explanation of plugins
CTF stegano practice stegano 9
优先使用对象组合,而不是类继承
[summary of two registration methods]
BDF application - topology sequence
Clickhouse同步mysql(基于物化引擎)
Redis之Jedis如何使用
在线文本行固定长度填充工具
A brief introduction to the behavior tree of unity AI
【PHP特性-变量覆盖】函数的使用不当、配置不当、代码逻辑漏洞
Subversive cognition: what does SRE do?
Thread Basics