热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

格式化解密二进制数据Cryptojs

由于@sami-hult,刚刚学习了如何加密二进制文件-我发现我也无法解密!我收到协

由于@ sami-hult,刚刚学习了如何加密二进制文件-我发现我也无法解密!我收到协议缓冲区消息并退出感兴趣的领域。纯文本是一个32字节的值。我可以验证它在远端被加密为32字节的有效负载,并且与发送时完全一样。

在这一点上,我正在努力找出下一部分。当我尝试将值缠绕为字符串时,我似乎做错了(再次)。

console.log('this.keyPairClient.public = ' + this.keyPairClient.public);
var iv_hexString = this.buf2hex(this.deviceRandom);
var key_hexString = this.buf2hex(this.shared_key);
var key = CryptoJS.enc.Hex.parse(key_hexString);
var iv = CryptoJS.enc.Hex.parse(iv_hexString);
console.log('iv = ' + iv);
console.log('key = ' + key);
const arrayToString = arr => arr.reduce((str,code) => str + String.fromCharCode(code),'');
const encrypted = new Uint8Array(this.device_Verfify_Data);
console.log('encrypted = ' + this.buf2hex( encrypted )); // correct! 32 bytes as sent
console.log('encrypted string length = ' + encrypted.length );
const encryptedString = arrayToString(encrypted);
// Decrypt.
const decryptedString = CryptoJS.AES.decrypt(encryptedString,key,{
mode: CryptoJS.mode.CTR,iv: iv,padding: CryptoJS.pad.NoPadding
}).toString(CryptoJS.enc.Latin1);
// const decryptedArray8 = Uint8Array.from(Buffer.from(decryptedString,'latin1'));
console.log('decrypted string length = ' + decryptedString.length );
console.log('decryptedString = ' + decryptedString);
const decryptedArray8 = this.stringToBytes(decryptedString);
console.log('decryptedArray8 = ' + decryptedArray8);
console.log(Array.apply([],decryptedArray8).join(","));
console.log('decryptedArray8 = ' + this.buf2hex( decryptedArray8 ));
buf2hex(buffer) { // buffer is an ArrayBuffer
return Array.prototype.map.call(new Uint8Array(buffer),x => ('00' + x.toString(16)).slice(-2)).join('');
}

日志如下:

[ng] [console.log]: "this.keyPairClient.public = 194,5,240,229,198,49,173,141,47,89,8,93,132,155,193,249,174,125,124,152,142,56,85,6,42,105,143,78,65"
[ng] [console.log]: "iv = ab3b3463be9f799c64ce9d556c6d4863"
[ng] [console.log]: "key = 7a8d39e4ec63d2a111c368e8b0b1681924e5881a4bb7c35766df39b87bd085f7"
[ng] [console.log]: "encrypted = f2cfc754c8329691b54d046c54b27f077fd42663171aeb3935f747de70918d36"
[ng] [console.log]: "encrypted string length = 32"
[ng] [console.log]: "decrypted string length = 24"
[ng] [console.log]: "decryptedString = ÿ7>úÇlú«P\u0007:@\u000eaMtqÀù;ÃÓy"
[ng] [console.log]: "decryptedArray8 = [object ArrayBuffer]"
[ng] [console.log]: ""
[ng] [console.log]: "decryptedArray8 = 93ff373efac76cfaab50073a400e614d7471c0f93bc3d379"

加密的= f2cfc ...与发送的二进制值匹配:

D (15209) security1: Device verify data:
D (15209) security1: f2 cf c7 54 c8 32 96 91 b5 4d 04 6c 54 b2 7f 07
D (15219) security1: 7f d4 26 63 17 1a eb 39 35 f7 47 de 70 91 8d 36

但是很明显,由于只有24个字节出现,所以下一部分会出错。它与所期望的值(this.keyPairClient.public)完全不同。噢亲爱的!有什么想法吗?





推荐阅读
  • js常用方法(1)startWithJava代码varstartsWithfunction(str,regex){if(regexundefined||strundefined|| ... [详细]
  • 在Java应用程序开发过程中,FTP协议被广泛用于文件的上传和下载操作。本文通过Jakarta Commons Net库中的FTPClient类,详细介绍如何实现文件的上传和下载功能。 ... [详细]
  • 深入解析ES6至ES8的新特性与应用
    本文详细介绍了自2015年发布的ECMAScript 6.0(简称ES6)以来,JavaScript语言的多项重要更新,旨在帮助开发者更好地理解和利用这些新特性进行复杂应用的开发。 ... [详细]
  • 日志记录对于软件开发至关重要,特别是在调试和维护阶段。通过日志,开发者能够追踪错误源头并了解系统的运行状态。本文将探讨如何在Django框架中有效配置和使用日志记录功能。 ... [详细]
  • 本教程将深入探讨C#编程语言中的条件控制结构,包括if语句和switch语句的使用方法。通过本课的学习,您将掌握如何利用这些控制结构来实现程序的条件分支逻辑。 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • 交互式左右滑动导航菜单设计
    本文介绍了一种使用HTML和JavaScript实现的左右可点击滑动导航菜单的方法,适用于需要展示多个链接或项目的网页布局。 ... [详细]
  • 本文探讨了在React项目中实现子组件向父组件传递数据的方法,包括通过回调函数和使用React状态管理工具。 ... [详细]
  • 本文介绍如何在Linux系统中卸载预装的OpenJDK,安装指定版本的JDK 1.8,并配置防火墙以确保系统安全性和软件兼容性。 ... [详细]
  • 如何处理MySQL命令行中文乱码问题
    本文详细探讨了MySQL命令行中出现中文乱码的原因及解决方案,通过调整配置文件和执行特定SQL命令来确保字符集正确设置,为用户提供了一个有效的解决路径。 ... [详细]
  • 本指南详细介绍了如何在同一台计算机上配置多个GitHub账户,并使用不同的SSH密钥进行身份验证,确保每个账户的安全性和独立性。 ... [详细]
  • 优化JavaScript中的多条件判断逻辑
    本文探讨了在JavaScript中遇到复杂逻辑判断时,如何通过不同的方法优化if/else或switch语句,以提高代码的可读性和可维护性。 ... [详细]
  • 本文探讨如何使用 PHP 进行字符串处理,特别是如何检测一个字符串是否存在于另一个字符串中,并确定其具体位置。通过实例代码展示,帮助读者掌握这一常用功能。 ... [详细]
  • Webpack中实现环境与代码的有效分离
    本文探讨了如何在Webpack中有效地区分开发与生产环境,并实现代码的合理分离,以提高项目的可维护性和加载性能。 ... [详细]
  • 微信小程序实现拍照与图片上传功能
    本文介绍如何在微信小程序中实现用户通过拍照或从相册选择图片,并将图片上传至服务器的功能,包括调用相关API和处理上传响应。 ... [详细]
author-avatar
有你世界就很美_484
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有