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

问题

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

起先,准备使用非对称加密(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,一经查实,立即删除!

相关文章

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

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

Zabbix如何监控Windows机器

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

如何写出高质量代码

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

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. …

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;通过收集、整理、理解、…

掌握深度学习,为什么要用 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软件打开启动扇…

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

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

mysql数据连接查询_mysql数据库 连接查询

左连接&#xff1a;select 列1&#xff0c;列2&#xff0c;列N fromtableA left join tableBon tableA.列 tableB 【此次表连接成一张大表&#xff0c;完全当成普通表看】where group ,having...照常写例&#xff1a;select goods_id,goods.cat_id,cat_name,goods_name,sho…

在DataGrid中合并单元格行

最近在做项目的时候经常遇到要合并单元格的情况&#xff0c;发现这个东西.net中并没有现成的方法&#xff0c;研究了一下&#xff0c;总结了两种方法。 这个主要都是行合并的&#xff0c;有以下两种情况 1、多行合并为一行&#xff0c;其中将某个或某几个单元格的内容合并起来 …

这些口碑炸裂的BBC神片,就是给孩子最好的生命教育

全世界只有3.14 % 的人关注了爆炸吧知识对孩子来说&#xff0c;好的纪录片就像是打开了一扇新世界的大门&#xff0c;让他们了解了更多大自然的奇妙之处。所以这次我们精心挑选了几部适合儿童观看的纪录片&#xff0c;其中绝大多数是导演专门为孩子拍摄的&#xff0c;大家可以在…

《划时代-51单片机C语言全新教程》-第四章 工程创建与深入 概览

&#xff08;请复制整个下载地址到迅雷、快车、QQ旋风进行下载&#xff09; 电子书下载地址&#xff1a;http://files.cnblogs.com/wenziqi/划时代&#xff0d;51单片机C语言全新教程.rar转载于:https://www.cnblogs.com/wenziqi/archive/2010/07/05/1771281.html

java模拟火车站买票的过程_Java常用代理

在我们通常的应用中&#xff0c;代理模式也是我们常用的设计模式之一。所谓的代理模式是指客户端并不直接调用实际的对象&#xff0c;而是通过调用代理对象&#xff0c;来间接的调用实际的对象。为什么要采用这种间接的形式来调用对象呢&#xff1f;一般是因为客户端不想访问实…

网络繁杂,我们该如何准确获取所需信息?

全世界只有3.14 % 的人关注了爆炸吧知识网络已经成为了很多人发表言论的地方不少网站亦难免存在宣泄情绪的内容网络繁杂&#xff0c;该如何获取准确信息&#xff1f;下面为你推荐一些客观公号希望能让你扩展视野&#xff0c;增长见识&#xff01;【关注方式 】1 - 搜索公众号ID…

被评为“影响世界千年的物理学家”,杨振宁的伟大,你根本不了解

全世界只有3.14 % 的人关注了爆炸吧知识2018年3月14日&#xff0c;英国科学家霍金去世&#xff0c;作为当代英国最杰出的科学家之一&#xff0c;英国用最规格的方式送别了这位伟大的科学家。霍金去世了&#xff0c;中国媒体沸腾了&#xff01;有人说&#xff1a;这是全人类的损…

Blazor+Dapr+K8s微服务之服务调用

1.1 Dapr环境配置1.1.1 在开发机安装Docker Desktop并启用Kubernetes安装过程略&#xff0c;安装好后效果如下&#xff1a;&#xff08;左下角两个绿色指示Docker和K8s正在运行&#xff09;1.1.2 在开发机安装Dapr Cli安装命令&#xff1a;powershell -Command …