如何保证接口的安全性, 对称加密、非对称加密、验证签名(md5)、令牌、网关、验证码等

编程入门 行业动态 更新时间:2024-10-20 18:51:02

如何保证接口的安全性, 对称加密、非对称加密、验证签名(md5)、<a href=https://www.elefans.com/category/jswz/34/1771317.html style=令牌、网关、验证码等"/>

如何保证接口的安全性, 对称加密、非对称加密、验证签名(md5)、令牌、网关、验证码等

接口数据加密

1. 对我们的接口实现对称加密,抓包的时候看不到明文的数据,但是可以被破解,因为客户端与服务器都是采用同一个密钥实现加解密,可以通过反编译客户端代码得出密钥实现破解,对称加密  Des、Aes

2. 使用非对称加密RSA公钥和私钥互换机制,客户端使用公钥实现加密,服务器端采用私钥实现解密,就算黑客破解出公钥也无法对数据实现解密。

       rsa非对称加密:就是一对密钥对(由私钥和公钥组成)。  是目前公认最安全的加密算。

       rsa非对称加密原理:使用公钥对数据加密,必须要用私钥进行解密(密钥对的私钥)。

- 对称加解密速度比RSA非对称加密要快,但是不安全。

非对称加密可实现:公钥加密、私钥解密; 私钥加密、公钥解密(公钥加密公钥是无法解密的)

import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
import java.util.Base64;public class RSAEncryptionDecryptionExample {public static void main(String[] args) throws Exception {// 在线生成公钥、私钥://// 公钥加密 ///// 给定的公钥字符串和明文字符串String publicKeyString = "公钥字符串";String plaintext = "待加密的明文";// 将公钥转换为字节数组形式byte[] publicKeyBytes = Base64.getDecoder().decode(publicKeyString);// 使用公钥进行加密得到密文PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(publicKeyBytes));cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] encrypted = cipher.doFinal(plaintext.getBytes());String encryptedString = Base64.getEncoder().encodeToString(encrypted);System.out.println("加密后的密文: " + encryptedString);/// 私钥解密 ///// 给定的私钥字符串和密文字符串String privateKeyString = "私钥字符串";String encryptedText = "待解密的密文";// 将私钥和密文转换为字节数组形式byte[] privateKeyBytes = Base64.getDecoder().decode(privateKeyString);byte[] encryptedBytes = Base64.getDecoder().decode(encryptedText);// 使用私钥进行解密得到明文PrivateKey privateKey = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(privateKeyBytes));Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] decryptedBytes = cipher.doFinal(encryptedBytes);String decryptedText = new String(decryptedBytes, "UTF-8");System.out.println("解密后的明文: " + decryptedText);}
}

验证签名(验签):

url传递的数据还是明文的,只不过服务端会做md5校验,通过md5的值去比对传递的参数,是否发生变化。

例如:

1. 商品在以from表单提交参数给支付宝对参数 Money=1000&orderNumber=10000  生成一个md5值 sign=YP8CFwTwTcEIdfcxZ1NmMZ%2FiV5%2BSw8Ihn8sorz6lVdENKbQDf5I

1.1. 最终传递的url:=1000&orderNumber=10000&sign=YP8CFwTwTcEIdfcxZ1NmMZ%2FiV5%2BSw8Ihn8sorz6lVdENKbQDf5I

2. 支付宝服务器端接收参数

 Money=1000&orderNumber=10000&sign=YP8CFwTwTcEIdfcxZ1NmMZ%2FiV5%2BSw8Ihn8sorz6lVdENKbQDf5I

  将明文的Money和orderNumber数据做一个md5值,然后和sign签名查看是否相同(md5值相同表示为篡改)。

使用MD5

可以采用MD5对我们的参数实现验证签名(参考以上demo),但是数据还是传输明文,可以防止篡改数据。

使用令牌

在rpc传递参数过程中使用令牌隐藏真实的参数。   例如:登录成功把用户信息生成token存入redis,把key响应给客户端。

HTTPS

1. 互联网电商项目都会采用Https协议 ssl+证书  加密传输 默认443 而我们的Http协议采用明文实现对数据传输,效率比较Https要高,但是不安全。

网关

使用api网关过滤器对防止xss、sql注入问题

<script>alert(‘ss’)</script>

黑白名单

  1. 对我们的api接口实现黑名单和白名单控制

 Money=1899&orderId=123456  

服务保护相关

对我们接口实现服务保护、限流、熔断

验证码

使用图形验证码防止机器模拟请求

更多推荐

如何保证接口的安全性, 对称加密、非对称加密、验证签名(md5)、令牌、网关、验证码等

本文发布于:2024-03-09 09:56:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1724659.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:令牌   网关   验证码   对称   安全性

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!