当前位置: 首页 > wzjs >正文

海口市住房和城乡建设局 网站网络推广员怎么做

海口市住房和城乡建设局 网站,网络推广员怎么做,app网站建设公司,一个完整的web项目开发流程Node.js环境安装 sodium-native (其他库可能会出现加密解密失败,如果要使用不一样的库,请自行验证) npm install sodium-native 示例代码,使用的是 sodium-native v4.3.2 (其他版本可能会有变化,如果要使用,请自行验…

Node.js环境安装 sodium-native (其他库可能会出现加密解密失败,如果要使用不一样的库,请自行验证)

npm install sodium-native

示例代码,使用的是 sodium-native v4.3.2 (其他版本可能会有变化,如果要使用,请自行验证)

const sodium = require('sodium-native');(async () => {await sodium.ready;// 1. 要加密的消息const message = "Hello, world!";try {// 2. 将消息转换为 Uint8Arrayconst messageBytes = new TextEncoder().encode(message);// 生成随机的密钥和 nonceconst key = new Uint8Array(sodium.crypto_aead_xchacha20poly1305_ietf_KEYBYTES); /* 创建一个 32 字节的空Uint8Array : [0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0
]*/const nonce = new Uint8Array(sodium.crypto_aead_xchacha20poly1305_ietf_NPUBBYTES); /* 创建一个 24 字节的空Uint8Array: [0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0
] */#实际开发中,key和nonce会指定,否则影响加密解密sodium.randombytes_buf(key); // 填充随机数据到 keysodium.randombytes_buf(nonce); // 填充随机数据到 nonceconsole.log("随机生成的密钥:", key);console.log("随机生成的 nonce:", nonce);// 创建一个足够大的缓冲区来存储加密后的数据和认证标签const ciphertext = new Uint8Array(messageBytes.length + sodium.crypto_aead_xchacha20poly1305_ietf_ABYTES);// 创建一个足够大的缓冲区来存储解密后的数据(不包括认证标签)const decrypted = new Uint8Array(ciphertext.length - sodium.crypto_aead_xchacha20poly1305_ietf_ABYTES);const additionalData = new Uint8Array(); // 可以为空,或者包含额外的认证数据// 3. 加密sodium.crypto_aead_xchacha20poly1305_ietf_encrypt(ciphertext, // 加密后的缓冲区messageBytes, // 将消息转换为 Uint8ArrayadditionalData, // 附加数据(可选)null, // 附加数据的 nonce(可选)nonce, // 随机生成的 noncekey // 随机生成的密钥);// 输出加密相关信息console.log("加密后的密文:", ciphertext);// 4. 解密sodium.crypto_aead_xchacha20poly1305_ietf_decrypt(decrypted, // 解密后的缓冲区null, // 不需要预先分配空间ciphertext, // 密文additionalData, // 附加数据(可选)nonce, // 随机生成的 noncekey // 随机生成的密钥);if (decrypted) {// 解密成功const decryptedMessage = new TextDecoder().decode(decrypted);console.log("解密后的消息:", decryptedMessage);} else {console.log("解密失败");}} catch (error) {console.error("加密或解密过程中发生错误:", error);}
})();

加密解密正确可用,输出结果:

我们可以看到,在javascript里,无论是key,nonce,还是加密后的密文,都是十进制数组(Uint8Array),对应是typescript的Buffer类,这点我们可以通过查看加密方法的定义

然而在实际开发中,我们很多时候需要前端和后端进行密文的互相解密加密,这里有一些需要注意的地方。

以python为例,python实现加密解密的方法:

pip install pynacl
import nacl.bindings
from nacl.utils import random
import nacl.secretkey = random(nacl.bindings.crypto_aead_xchacha20poly1305_ietf_KEYBYTES)
#也可以是读取key文件获得key,比较常见的做法
# with open('/keyfile/key.cas-ie-key','rb') as file:
#         key = file.read()
decimal_array = [byte for byte in key]
print("随机生成的Key:", key)
nonce = random(nacl.bindings.crypto_aead_xchacha20poly1305_ietf_NPUBBYTES) #实际开发中,key和nonce会指定,否则影响加密解密
print("随机生成的nonce:", nonce)message = b"Hello, world!"ciphertext = nacl.bindings.crypto_aead_xchacha20poly1305_ietf_encrypt(message, None, nonce, key)
print("加密后的密文:",ciphertext)
print("解密后的明文:", nacl.bindings.crypto_aead_xchacha20poly1305_ietf_decrypt(ciphertext, None, nonce, key))

得到结果:

可以看到,python端的key,nonce,和密文,都是字节串bytes,调用方法时,也是传入的字节串参数。而javascript里则是十进制数组,调用方法时,也是传入的十进制数组参数(Uint8Array,对应typescript的Buffer)。

所以,python的密文在javascript端解密,javascript的密文在python端解密,是不能直接用对方的key,nonce,和密文的。

我们需要将字节串bytes和Unit8Array进行相互转换

从python端到javascript:

#在python端转换为十进制数组
decimal_array = [byte for byte in ciphertext]#key,nonce同理#结果:[108, 13, 97, 116, 187, 108, 69, 252, 135, 246, 107, 42, 39, 176, 94, 232, 140, 247, 152, 2, 239, 29, 23, 172, 131, 254, 30, 77, 46]

javascript端转换为Uint8Array后再传入方法里:

const ciphertext = new Uint8Array([108, 13, 97, 116, 187, 108, 69, 252, 135, 246, 107, 42, 39, 176, 94, 232, 140, 247, 152, 2, 239, 29, 23, 172, 131, 254, 30, 77, 46])
#key,nonce同理

从javascript到python端:

#在python里直接把js的数组转换为字节串即可
#key,nonce同理
ciphertext = bytes(unint8array_from_js)

http://www.dtcms.com/wzjs/417712.html

相关文章:

  • 行业网站推广怎么做凤凰网全国疫情实时动态
  • 两个域名指向同一个网站提高工作效率
  • 网页快照网站常用的网络营销工具有哪些
  • 微信客户端网站建设windows优化大师提供的
  • 江西省赣州市官网seo研究中心教程
  • 阿里云oss可以做网站中国十大企业培训机构排名
  • 没有做网站地图影响大吗吗软文广告发稿
  • 上海代办网站备案怎样通过网络销售自己的产品
  • 杭州网站建设培训竞价托管推广哪家好
  • 兴华建设集团有限公司网站怎样在百度上发布免费广告
  • 网站设计软件培训怎么样高质量网站外链平台
  • go语言做网站云优化seo
  • 查询商品价格走势的网站网络营销是做什么的工作
  • dz网站收款即时到账怎么做的网店营销的推广方法有哪些
  • 专门做图片的网站吗搜索引擎内部优化
  • 大规模301让网站快速排名排行榜哪个网站最好
  • 找做网站公司需要注意什么条件百度如何投放广告
  • 房产类网站开发免费seo培训
  • 备案ip 查询网站查询网站天津seo选天津旗舰科技a
  • 成都市那里有网站建设制作公司百度营销推广官网
  • 写作兼职网站关键词搜索排名公司
  • 开封市做网站的公司微信推广多少钱一次
  • 电子商务网站开发常见推广普通话手抄报句子
  • 网站建设功能报价表市场营销毕业论文
  • 上海网站建设q479185700強大同优化推广
  • 网站建设需要用到哪些技术最近的时事新闻
  • 安康免费做网站公司营销策划是做什么
  • 珠海网站推广sem分析是什么
  • 陕西手机网站建设公司重庆森林百度云
  • 网站开发离线下载报表网店推广方案范文