NKN公链源码学习(1):webgui的加密通信

本文介绍了NKN公链的WebGUI模块在通信过程中的加密方式,特别是针对wallet密码的AES对称加密。详细解析了解密函数`DecryptData`的逻辑,包括解密密钥的生成,其中涉及到`token`和`PasswordHash`的使用。`token`每60秒更新,而`PasswordHash`作为秘密部分,确保解密的安全性。然而,`wallet/open`接口的加密可能存在安全隐患,因为不需`PasswordHash`即可解密。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

NKN的web-gui即dashboard模块,在通信过程中,有参数的HTTP包都会进过一次AES对称加密。

像这样

POST /api/wallet/open HTTP/1.1
Host: 192.168.1.100:30000
Content-Length: 63
Accept: application/json, text/plain, */*
Unix: 1588221168
Origin: http://192.168.1.100:30000
Content-Type: application/json;charset=UTF-8
Cookie: i18n_redirected=en; session=MTU4ODIyMTE2M3xRY2VaUnlSclQ1V3lOUllOSzAzSHZnMWhaZkJPbWpELUVjSGZNcTdBVWpHNnZLa1lZakF6b08xbXlHUklLanVCWU9fWkJueThRY0VnVU1mWjBrbHNmWjVjTFY1bnAzZVBJZUFtM1l0ay02WjZtTkNmaTRTR1pCNkgtcWVZN2ZRd1B4TGZ8FlyZ4mfYPDAvX_64WpEYZxPLBMNqm4Zq9LwtHU3v0AI=
Connection: close

{"data":"3ddc98eb25e7f572a0294533187e0d24b0e71c76897f300ec8d6"}

这里加密的data内容,其实是wallet的密码,即webgui的登陆密码。
阅读源码后总结了一下加密密钥的协商和使用的实现方法。

解密函数

我们只研究接收者逻辑

DecryptData

func DecryptData(context *gin.Context, hasSeed bool) string {
   
	...
	seed := ""
	wallet, exists := context.Get("wallet")
	if exists && hasSeed {
   
		passwordKeyHash := wallet.(*vault.WalletImpl).Data.PasswordHash
		seedByte := sha256.Sum256(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可爱多多白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值