API 数据加密方案

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: API 数据加密方案

API 数据加密方案
接口安全要求:
1.防伪装攻击(案例:在公共网络环境中,第三方 有意或恶意 的调用我们的接口)
2.防篡改攻击(案例:在公共网络环境中,请求头/查询字符串/内容 在传输过程被修改)
3.防重放攻击(案例:在公共网络环境中,请求被截获,稍后被重放或多次重放)
4.防数据信息泄漏(案例:截获用户登录请求,截获到账号、密码、用户敏感信息等)
常见的加密方式:
DES加密算法: DES加密算法是一种分组密码,以64位为分组对数据加密,它的密钥长度是56位,加密解密用同一算法。DES加密算法是对密钥进行保密,而公开算法,包括加密和解密算法。这样,只有掌握了和发送方相同密钥的人才能解读由DES加密算法加密的密文数据。因此,破译DES加密算法实际上就是搜索密钥的编码。对于56位长度的密钥来说,如果用穷举法来进行搜索的话,其运算次数为256。
随着计算机系统能力的不断发展,DES的安全性比它刚出现时会弱得多,然而从非关键性质的实际出发,仍可以认为它是足够的。不过,DES现在仅用于旧系统的鉴定,而更多地选择新的加密标准。
AES加密算法: ES加密算法是密码学中的高级加密标准,该加密算法采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的区块加密标准,这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
AES加密算法被设计为支持128/192/256位(/32=nb)数据块大小(即分组长度);支持128/192/256位(/32=nk)密码长度,,在10进制里,对应34×1038、62×1057、1.1×1077个密钥。
RSA加密算法: RSA加密算法是目前最有影响力的公钥加密算法,并且被普遍认为是目前最优秀的公钥方案之一。RSA是第一个能同时用于加密和数宇签名的算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA加密算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
MD5加密算法: MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。对MD5加密算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成—个128位散列值。
MD5被广泛用于各种软件的密码认证和钥匙识别上。MD5用的是哈希函数,它的典型应用是对一段信息产生信息摘要,以防止被篡改。MD5的典型应用是对一段Message产生fingerprin指纹,以防止被“篡改”。如果再有—个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。MD5还广泛用于操作系统的登陆认证上,如UNIX、各类BSD系统登录密码、数字签名等诸多方

对称加密方式:
Symmetric Cryptography,是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)使用同样的密钥(secret key)。
常见的对称加密算法如 AES,Advanced Encryption Standard。
流程:
1:前端通过一定算法或者密钥对数据进行加密;
2:后端通过相同逆向的方式对数据进行解密;
优点:数据是密文,一般人看不懂,不易泄露,加密解密方式简单;缺点:密钥必须保存在前端,容易泄露,泄露后数据将被解密甚至伪造;
非对称加密:
Asymmetric Cryptography,使用了一对密钥,公钥(public key) 和 私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。私钥是不会通过网络发送出去,因此安全性大大提高。
目前最常用的非对称加密算法是 RSA 算法、DSA算法
流程:
1:后端生成公钥,私钥;
2:前端请求公钥,并保存;
3:前端通过公钥加密数据传输给后端;
4:后端通过私钥解密数据后通过私钥加密返回数据给前端;

优点:密文传输,私钥放后端不易泄露,前端提交数据是安全的,不易被解密或者修改;
缺点:后端返回的数据可能会被截取解密(因为公钥是公开的);

Https 实现方式 对称加密+非对称加密(会话密钥模式)
常用算法:AES+RSA
流程:
1:后端生成公钥,私钥保存
2:前端获取公钥,保存
3:前端会话前获取随机数,并通过公钥加密后作为会话密钥对数据进行对称加密后传输给后端
4:后端获取到加密会话密钥 通过私钥解密出真正的会话密钥,返回数据时通过真正的会话密钥对数据加密
5:前端获得后端返回的加密数据通过自己之前随机生成的会话密钥解密数据

优点:数据提交跟返回都是密文,且密钥是会话时随机生成并非直接保存在前端不变,不易泄露,保证提交数据跟返回数据都是加密,安全的
缺点:多次加密解密,相对比较耗cpu
采用加密方案:
目前采用的加密流程为:
为不同的客户端 app 分配了不同的 RSA 加密的公钥,私钥保存在服务器中;
客户端 app 随机生成 AES 密钥并通过 RSA 加密放在请求 header 中;
服务端使用 RSA 的私钥,解密出 AES 密钥原文,从而解密出请求参数;进行业务处理;
使用客户端发过来的 AES 密钥将返回数据加密返回

接口参数加密+时效性验证+私钥

         /// <summary>
         /// 接口加密并根据时间戳判断有效性而且带着私有key校验
         /// </summary>
         /// <returns></returns>
          [HttpGet]
          [Route("SecureBySign/Expired/KeySecret")]
         public HttpResponseMessage SecureBySign_Expired_KeySecret([FromUri]int age, long _timestamp, string appKey, string _sign)
          {
             //key集合,这里随便弄两个测试数据
             //如果调用方比较多,需要审核授权,根据一定的规则生成key把这些数据存放在数据库中,如果功能扩展开来,可以针对不同的调用方做不同的功能权限管理
             //在调用接口时动态从库里取,每个调用方在调用时带上他的key,调用方一般把自己的key放到网站配置中
              Dictionary<string, string> keySecretDic = new Dictionary<string, string>();
              keySecretDic.Add("key_zhangsan", "D9U7YY5D7FF2748AED89E90HJ88881E6");//张三的key,
              keySecretDic.Add("key_lisi", "I9O6ZZ3D7FF2748AED89E90ZB7732M9");//李四的key
             var result = new ResultModel<object>()
              {
                  ReturnCode = 0,
                  Message = string.Empty,
                  Result = string.Empty
              };
             #region 判断请求是否过期---假设过期时间是20秒
              DateTime requestTime = GetDateTimeByTicks(_timestamp);
             if (requestTime.AddSeconds(20) < DateTime.Now)
              {
                  result.ReturnCode = -1;
                  result.Message = "接口过期";
                 return GetHttpResponseMessage(result);
              }
             #endregion
             #region 根据appkey获取key值
             string secret = keySecretDic.Where(T => T.Key == appKey).FirstOrDefault().Value;
             #endregion
             #region 校验签名是否合法
             var param = new SortedDictionary<string, string>(new AsciiComparer());
              param.Add("age", age.ToString());
              param.Add("appKey", appKey);
              param.Add("appSecret", secret);//把secret加入进行加密
              param.Add("_timestamp", _timestamp.ToString());
             string currentSign = SignHelper.GetSign(param, appKey);
             if (_sign != currentSign)
              {
                  result.ReturnCode = -2;
                  result.Message = "签名不合法";
                 return GetHttpResponseMessage(result);
              }
             #endregion
             var dataResult = stulist.Where(T => T.Age == age).ToList();
              result.Result = dataResult;
             return GetHttpResponseMessage(result);
          }

参考链接:
优雅的处理API 接口敏感数据加密解密:
https://codetreasures.com/blog/detail/iIejWLK0Ji
API接口安全方案:https://blog.mimvp.com/article/37824.html
API 接口的参数加密签名设计思路(参数加密+超时处理+私钥验证+Https):https://segmentfault.com/a/1190000039859234
API接口的签名验签和加解密原理
https://www.woshipm.com/pd/3011489.html

相关文章
|
运维 安全 API
统一接入API赋能开发者:自动高效、灵活编排的云产品日志采集方案
随着企业对网络安全和数据安全防护水平要求的逐步提升,企业管理对企业生产运维过程中所产生的日志数据,在留存处理、权限隔离、跨境合规、数据汇总等方面提出了更高阶的需求。为了满足大客户及一些国际化客户安全合规、简单快速地接入日志、使用日志、操作日志,我们提出了一种新的解决方案——“云产品统一接入API”。统一接入API主要针对阿里云云产品日志类型,以API的方式提供企业或组织用户快速上手,编排灵活的日志采集方案。
|
2月前
|
存储 安全 数据库
双重防护,无懈可击!Python AES+RSA加密方案,构建最强数据安全堡垒
【9月更文挑战第11天】在数字时代,数据安全至关重要。AES与RSA加密技术相结合,构成了一道坚固防线。AES以其高效性保障数据加密,而RSA则确保密钥安全传输,二者相辅相成,提供双重保护。本文通过Python代码示例展示了这一加密方案的魅力,强调了其在实际应用中的重要性和安全性。使用HTTPS等安全协议传输加密密钥和密文,确保数据在数字世界中自由流通而无忧。
69 1
|
3月前
|
SQL 安全 API
数字堡垒之下:网络安全漏洞、加密技术与安全意识的博弈探索RESTful API设计的最佳实践
【8月更文挑战第27天】在数字化浪潮中,网络安全成为守护个人隐私与企业资产的关键防线。本文深入探讨了网络漏洞的成因与影响,分析了加密技术如何为数据保驾护航,并强调了提升公众的安全意识对于构建坚固的信息防御系统的重要性。文章旨在为读者提供一场思维的盛宴,启发更多关于如何在日益复杂的网络世界中保护自己的思考。
|
3月前
|
自然语言处理 Go 数据安全/隐私保护
对 int 类型的数据加密,有哪些好的方案?
对 int 类型的数据加密,有哪些好的方案?
102 13
|
3月前
|
存储 安全 数据库
双重防护,无懈可击!Python AES+RSA加密方案,构建最强数据安全堡垒
【8月更文挑战第3天】在数字时代,数据安全至关重要。Python AES+RSA加密方案提供了一种强大且可靠的数据保护方式。AES以高效安全著称,适用于大量数据的快速加密;RSA作为非对称加密技术,确保了密钥传输的安全性。二者结合形成“内外兼修”的加密策略:AES加密数据内容,RSA保护AES密钥,共同构建起数据安全的双重保险。通过示例代码展示了这一加密流程,强调了加密后密钥与密文的安全传输和存储的重要性。在实际应用中,应采用HTTPS等安全协议进行传输,并将数据安全存储于加密的数据库或文件系统中。
81 12
|
3月前
|
JSON 算法 API
【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token
【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token
|
3月前
|
开发框架 .NET API
分享一个 ASP.NET Web Api 上传和读取 Excel的方案
分享一个 ASP.NET Web Api 上传和读取 Excel的方案
123 0
|
6月前
|
API 数据安全/隐私保护
单页源码加密屋zip文件加密API源码
单页源码加密屋zip文件加密API源码 api源码里面的参数已改好,往服务器或主机一丢就行,出现不能加密了就是加密次数达到上限了,告诉我在到后台修改加密次数
46 1
|
6月前
|
缓存 监控 测试技术
ERP系统对接方案与API接口封装系列(高并发)
企业资源规划(ERP)系统是现代企业管理的核心,它集成了企业内部的各个部门和业务流程。为了实现ERP系统与其他外部系统或应用程序之间的数据交换和协作,需要对接方案。API(应用程序编程接口)是实现系统对接的常用方法之一。
|
6月前
|
机器学习/深度学习 安全 搜索推荐
【现代密码学】笔记3.4-3.7--构造安全加密方案、CPA安全、CCA安全 《introduction to modern cryphtography》
【现代密码学】笔记3.4-3.7--构造安全加密方案、CPA安全、CCA安全 《introduction to modern cryphtography》
277 0