请收藏!这可能是目前最安全的数据加密传输解决方案

问题

为了安全性起见,客户要求客户端必须将数据加密后才能传给服务端。

起先,准备使用非对称加密(RSA)方式,但是发现它对原始文本长度有限制。

而对称加密(AES)没有长度限制,但是使用固定密钥存在暴露的风险。

有没有两全其美的办法呢?

思路

密钥肯定每个用户不同,而要验证用户则必须登录。

因此,唯一可以安全获取密钥的时机,只能是在登录时。

而为了保证用户名密码传输安全,可以使用RSA公钥加密后传输,所有客户端使用同一公钥也没问题。

登录成功后,服务端将生成token和AES密钥返回给客户端。但是,返回的AES密钥是经过加密的,而加密密钥则是“用户名+密码”。

这样保证了,只有刚才成功登录的客户端才能解密出AES密钥。

以后的传输,全部使用AES加密,服务端可以根据token从缓存获取AES密钥解密。

整体流程如下图:

服务端实现

下面是示例服务端的实现代码:

[HttpPost("Login")]
public LoginOutput Login(LoginInput input)
{var userName = RsaHelper.Decrypt(input.UserName, privateKey);var password = RsaHelper.Decrypt(input.Password, privateKey);(byte[] tmpKey, byte[] tmpIV) = AesHelper.CreateKeyIV(userName + password, password + userName);var token = Guid.NewGuid().ToString("N"); (byte[] key, byte[] iv) = AesHelper.CreateKeyIV();_cache.Add(token, (key, iv));return new LoginOutput{Token = token,Key = AesHelper.Encrypt(Convert.ToBase64String(key), tmpKey, tmpIV),IV = AesHelper.Encrypt(Convert.ToBase64String(iv), tmpKey, tmpIV)};
}[HttpPost("TestMethod")]
public string TestMethod([FromQuery]string token, [FromBody]string cipherText)
{(byte[] key, byte[] iv) = _cache[token];return AesHelper.Decrypt(cipherText, key, iv);
}

Login用于验证用户密码并返回token和AES密钥.

TestMethod用于演示接收客户端数据如何解密,为了演示方便,直接在URL传递token。

客户端实现

使用xunit测试项目演示客户端操作,代码如下:

[Fact]
public async void Test1()
{//登录获得AES密钥var response = await _httpClient.PostAsync( "/Demo/Login",JsonContent.Create(new WebApplication1.LoginInput{ UserName = RsaHelper.Encrypt(userName, publicKey),Password = RsaHelper.Encrypt(password, publicKey)}));var loginResult = await response.Content.ReadFromJsonAsync<WebApplication1.LoginOutput>();(byte[] tmpKey, byte[] tmpIV) = AesHelper.CreateKeyIV(userName + password, password + userName);byte[] key =Convert.FromBase64String(AesHelper.Decrypt(loginResult.Key, tmpKey, tmpIV));byte[] iv = Convert.FromBase64String(AesHelper.Decrypt(loginResult.IV, tmpKey, tmpIV));//使用AES密钥加密var cipherText = AesHelper.Encrypt(PlainText, key, iv);_output.WriteLine(cipherText);response = await _httpClient.PostAsync("/Demo/TestMethod?token=" + loginResult.Token,JsonContent.Create(cipherText));var decryptResult = await response.Content.ReadAsStringAsync();_output.WriteLine(decryptResult);Assert.Equal(PlainText, decryptResult);
}

将大量数据(千字文)加密后传给服务。

可以看到,返回了正确的原始数据:

结论

通过同时使用RSA+AES,保证了密钥和数据的安全性。

如果你也碰到了类似需求,不妨试试本文的实现方案。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql kill hup_kill -HUP pid

kill -HUP pid其中 pid 是进程标识。如果想要更改配置而不需停止并重新启动服务&#xff0c;请使用该命令。在对配置文件作必要的更改后&#xff0c;发出该命令以动态更新服务配置。根据约定&#xff0c;当您发送一个挂起信号(信号 1 或 HUP)时&#xff0c;大多数服务器进程(所…

Windows Live Essentials Wave3 QFE 官方各组件独立安装包

版本是14.0.8064.0206&#xff0c;签名日期为&#xff1a;2009-2-7 可根据自己的需要选择下载安装&#xff01;均可安装在SERVER版上&#xff01; Live Messenger | Live contacts &#xff08;安装Live Messenger的话&#xff0c;contacts 必须&#xff09; Live Writer Live …

厉害了!平均年龄8岁的抽象派画家,网友笑称:这些作品,康定斯基看了都得服气!...

全世界只有3.14 % 的人关注了爆炸吧知识在孩子们的眼中&#xff0c;世间万物都被赋予了无限的想象力&#xff0c;而绘画是他们独特想法和思维的表达。小鸟为什么在水里&#xff1f;因为它想学习游泳。鱼儿为什么会在天上&#xff1f;因为它想看看大地。一支小小的画笔&#xff…

COM组件与.NET技术对比

一、元数据 在COM中所有组件信息都存储在类型库中。.NET中信息都存储在数据集中。一些COM组件有类型库&#xff0c;一些却没有&#xff08;如VB编的&#xff0c;因为C可以用IDL——接口定义语言表述接口和方法&#xff0c;而VB不行&#xff09;。没有的话需要用C头文件来表述接…

Zabbix如何监控Windows机器

最近一直在研究Zabbix监控Windows机器&#xff0c;涉及到如何快速安装agent,如何修改和完善windows监控模板等等。想把自己的经验给大家分享一下&#xff0c;希望对大家有所帮助。1)安装agent客户端 首先分享一下用bat写的自动化安装Windows机器的agentd安装脚本,脚本里面的tc…

如何写出高质量代码

教你写出高质量代码的方法网络上有很多&#xff0c;比如设计原则、设计模式、重构技巧、命名规范等&#xff0c;以上这些本文统统都不会讲。个人理解高质量代码一定是结合业务并深度思考过的产出。很多人拿到需求后&#xff0c;业务和流程还没理顺后就直接编码&#xff0c;然后…

mysql的查表语句_mysql查表语句_MySQL

bitsCN.commysql查表语句[sql]describe table_name;这个命令用来显示一个表格的结构------------------------------------------------| Field | Type | Null | Key | Default | Extra |------------------------------------------------| ID | int(11) | NO | PRI | NULL | …

AOP技术研究 再续

第四部分 .Net平台AOP技术研究 4.1.Net平台AOP技术概览 .Net平台与Java平台相比&#xff0c;由于它至今在服务端仍不具备与unix系统的兼容性&#xff0c;也不具备类似于Java平台下J2EE这样的企业级容器&#xff0c;使 得.Net平台在大型的企业级应用上&#xff0c;常常为人所诟…

震惊!原来现在无所不能的世界主人翁,早已在三千年前就悄然出现!

▲ 点击查看早在春秋时代&#xff0c;鲁班作为机械工程师的祖师爷&#xff0c;就极其擅长且痴迷于一些古怪的机械装置&#xff0c;因此&#xff0c;他除了发明了墨斗、曲尺这些正儿八经的东西之外&#xff0c;最出名的就是用木头&#xff0c;发明了一只据说能在天上飞三天而不落…

ASP.NET MVC 1.0 Result 几何?

Action的返回值类型到底有几个&#xff1f;咱们来数数看。 ASP.NET MVC 1.0 目前一共提供了以下十几种Action返回结果类型&#xff1a; 1. ActionResult&#xff08;base&#xff09; 2. ContentResult 3. EmptyResult 4. HttpUnauthorizedResult 5. …

针对SharePointFarm场时安装部署OWA的步骤

下面文章列出针对SharePointFarm场时安装部署OWA的步骤&#xff1a; http://blogs.technet.com/b/meamcs/archive/2013/03/27/office-web-apps-2013-multi-servers-nlb-installation-and-deployment-for-sharepoint-2013-step-by-step-guide.aspx转载于:https://www.cnblogs.co…

mysql双机互备linux成功的_配置MySQL双机热备 - Linux服务器MySQL双机热备份试验_数据库技术_Linux公社-Linux系统门户网站...

二、配置MySQL双机热备传统模式都是采用MySQL双机互备&#xff0c;至于双机热备我搜索了大量的精华帖子都没有发现安装配置文档。故我的一个想法产生了&#xff1a;当建立新的数据库时&#xff0c;默认会建立到/usr/local/mysql/data这里&#xff0c;如果能改掉默认配置文件my.…

万字总结:开源软件通识基础课第三周知识点总结

我们在前两周的课程上&#xff08;第一周、第二周&#xff09;&#xff0c;系统讲授了 FOSS 的课程内容&#xff0c;第三周&#xff0c;我们开始进入 COSS&#xff08;商业开源&#xff09;的部分。本导学班在调研全球开源教育与课程的基础上&#xff0c;通过收集、整理、理解、…

CISCO IOS SLB服务器负载均衡

CISCO IOS SLB在多台服务器之间智能地均衡TCP/IP流量&#xff0c;是一种4层或7层交换功能。目前只有catalyst 6500支持。推荐在在catalyst 6500交换机中选择ACE服务模块&#xff0c;不仅能提供16Gbit/s的性能&#xff0c;而且还能通过SSL加密和双向内容检查实现安全性。优点&a…

掌握深度学习,为什么要用 PyTorch、TensorFlow 框架?

全世界只有3.14 % 的人关注了爆炸吧知识自从2012年深度学习再一次声名鹊起以来&#xff0c;许多机器学习框架都争先恐后地要成为研究人员和行业从业者的新宠。面对如些众多的选择&#xff0c;人们很难判断最流行的框架到底是什么。在某些情况下&#xff0c;深度学习或深度迁移学…

SharePoint 2010 中的BCS身份验证模式

BCS&#xff08;Business Connectivity Services&#xff09;是SharePoint 2010中用于替换原先Microsoft Office SharePoint Server 2007企业版的业务数据目录&#xff08;Business Data Catalog &#xff0c;简称BDC&#xff09;的一项新服务。 BCS相比BDC而言有许多改进&…

SD卡读写扇区注意事项(转)

源&#xff1a;http://blog.163.com/zhaojun_xf/blog/static/30050580201151410635516/ 在调试SD卡时&#xff0c;大家都喜欢使用扇区进行验证。也就是说&#xff0c;一般都是通过读写扇区数据进行比较&#xff0c;或者读取第0扇区的数据&#xff0c;在通过WinHex软件打开启动扇…

mysql用in查询list_Mysql优化器对in list的处理

select * from table where id in (....)这样的查询&#xff0c;是走范围索引还是走等值索引&#xff1f;select * from table where key_part1 in (....) and key_part2XX;这样的查询&#xff0c;第二部分还走不走索引&#xff1f;测试目的&#xff0c;想知道&#xff0c;MYSQ…

开源软件通识基础:第二周课程回顾与总结

接第一篇《开源软件通识基础&#xff1a;第一周课程回顾与总结》&#xff0c;本文为第二周课程内容的回顾与总结。本导学班在调研全球开源教育与课程的基础上&#xff0c;通过收集、整理、理解、拓展国际最新的前沿开源课程&#xff0c;采取众创的模式&#xff0c;由 X-lab 核心…

心情分享

很快&#xff0c;毕业半年多了也工作半年了。回过头想想这段时间更多的是思考&#xff0c;想说的是自己的认识&#xff0c;能做的只有更加的努力。现在都把大学生和民工做比较&#xff0c;甚至有人说大学生还不如民工。是对还是错&#xff1f;谁的错&#xff0c;没有衡量的依据…