# AES-RSA **Repository Path**: worklz/aes-rsa ## Basic Information - **Project Name**: AES-RSA - **Description**: PHP和JS前后端数据加解密 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 2 - **Created**: 2021-12-26 - **Last Updated**: 2023-09-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: AES, RSA, PHP, JavaScript ## README # PHP&JS前后端数据加解密 ## 1. 非对称加解密设计 #### 1.1 专业术语 RSA:RSA加密算法是一种非对称加密算法。 AES:高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法。 SHA1withRSA:用SHA算法进行签名,用RSA算法进行加密,是一种签名算法。 公钥和私钥:公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。 #### 1.2 方案对比 加密方案 前后端都用RSA非对称加密 采用RSA和AES组合加密 实现方式 前后端都保存自己的私钥和对方的公钥,公钥加密私钥解密 前端保存后端生成的RSA公钥,每次请求都用AES密钥加密,AES密钥用RSA公钥加密。后端用RSA私钥解密AES密钥,然后用AES密钥解密请求数据。响应数据用AES密钥加密,AES密钥用RSA做加签,前端验签,然后解密。 前端暴露 自己的私钥,后端的公钥 后端的公钥 安全性 因为前端暴露了自己的私钥,将使后端的加密不安全 只暴露了后端的RSA公钥,AES密钥是用RSA公钥加密的,而且AES密钥是一次一密,理论上是安全的。 #### 1.3 方案流程 前端:事先保存后端生成的RSA公钥 —>发起请求---->用生成的AES秘钥加密请求数据,同时用RSA公钥加密AES秘钥 后端:接收前端请求数据,使用RSA私钥解密AES秘钥,再用AES秘钥解析请求数据,解密成功后,响应数据用AES密钥加密,AES秘钥用RSA私钥加签后返回; 前端:接收后验签,通过后AES秘钥解密响应数据,完成前后端的交互 ## 2. 模块设计 #### 2.1. 前端加密 保存好后端生成的RSA公钥,每次请求都生成一个AES密钥,做到一次一密,请求json格式{"key":"XXX","iv":"XXX","data":"XXX"},key是用RSA公钥加密之后的AES密钥,data是用AES密钥加密之后请求数据。 #### 2.2. 后端解密 接收到前端请求数据之后,先用RSA私钥解密key,获取到AES密钥,再用AES密钥解密data获取到请求数据。 #### 2.3. 后端加签加密 Key是用RSA私钥用SHA1withRSA签名算法把AES密钥加签,data是用AES密钥加密响应数据。 #### 2.4. 前端验签解密 先用RSA公钥用SHA1withRSA签名算法验签key,验签通过再处理之后的流程,不通过停止执行后续流程。验签通过之后,再用AES密钥解密data。