呼吸睡眠接口文档 - back

1


AES加密和解密要求指南

<h1>接口安全加密和解密指南</h1> <p><strong>重要说明</strong>:本文档中描述的AES加密和解密过程对于本系统的<strong>所有接口</strong>是<strong>强制性</strong>和<strong>不可忽视</strong>的。请确保在实现任何接口交互时,严格遵守以下指定的加密和解密标准。</p> <h2>全局加密和解密要求</h2> <p>每个接口在发送和接收数据时,必须实施以下AES加密和解密流程。这是确保数据传输安全的核心要求。</p> <h3>关键配置</h3> <ul> <li><strong>加密模式</strong>:CBC(密码块链接)。</li> <li><strong>填充方式</strong>:PKCS5。</li> <li><strong>数据块大小</strong>:128位。</li> <li><strong>密钥</strong>:略</li> <li><strong>初始向量(IV)</strong>:略。</li> </ul> <h3>请求和响应格式(重要)</h3> <p>所有请求和响应数据必须符合以下格式规范:</p> <ul> <li><strong>格式要求</strong>:数据包装在JSON对象中,使用<code>encryption</code>字段包含加密后的密文。 <ul> <li>请求示例:<code>{&amp;quot;encryption&amp;quot;: &amp;quot;&amp;lt;加密后的Base64数据&amp;gt;&amp;quot;}</code></li> <li>响应示例:<code>{&amp;quot;encryption&amp;quot;: &amp;quot;&amp;lt;加密后的Base64数据&amp;gt;&amp;quot;}</code></li> </ul></li> </ul> <h3>加密流程</h3> <ol> <li><strong>生成密钥和IV</strong>:确保使用安全方式生成密钥和IV。</li> <li><strong>数据加密</strong>:在发送请求前,对所有数据使用AES加密。</li> <li><strong>封装请求</strong>:将加密后的数据放入<code>encryption</code>字段中发送。</li> </ol> <h4>加密示例</h4> <p>假设您的原始请求JSON如下:</p> <pre><code class="language-json">{ &amp;quot;appKey&amp;quot;: &amp;quot;示例appKey&amp;quot;, &amp;quot;deviceCode&amp;quot;: &amp;quot;示例deviceCode&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;示例时间戳&amp;quot; }</code></pre> <p>使用AES加密后,将加密数据封装在encryption(<code>&amp;lt;加密后的Base64数据&amp;gt;</code>)字段中:</p> <pre><code class="language-json">{ &amp;quot;encryption&amp;quot;: &amp;quot;DokeXjQkRp6zk3tJ0EUoDk8HZFYhhA/X5+n5Jmtugo7sD86diSywr+G25ja2+5Rj+b09DEadHgkGlkWNTy1uTgkZtK3hqq5SINyGAJywmDw=&amp;quot; }</code></pre> <h3>解密流程</h3> <ol> <li><strong>接收数据</strong>:接收加密的JSON对象。</li> <li><strong>提取密文</strong>:从<code>encryption</code>字段获取密文。</li> <li><strong>数据解密</strong>:使用相同的密钥和IV解密,以获得原始数据。</li> </ol> <h4>解密示例</h4> <p>假设您收到的加密响应JSON <code>&amp;lt;加密后的Base64数据&amp;gt;</code> 如下:</p> <pre><code class="language-json">{ &amp;quot;encryption&amp;quot;: &amp;quot;3bmumZQqFdSaK/2V+hq8RUT7SCWavUSWFT6CRdksyJ9VKgmv+zi0SA91sRRMyykxewIZT9/ma0YYwhokAMSVg3L+zBg2mTqLlwYnFg8DugfgG8s5g6IK7pmxmo/Z96bJfFXBk8EMV+zqO5tBgbZOWqDxM9PiIRMtKo6HU6e4KBsfmAumIxRnNr0ql3lmYy7H4fB9TsMV6HNcMX2Rkq24Eg==&amp;quot; }</code></pre> <p>解密后,您将获取如下格式的原始数据:</p> <pre><code class="language-json">{ &amp;quot;code&amp;quot;: &amp;quot;000&amp;quot;, &amp;quot;errorMessage&amp;quot;: &amp;quot;Success&amp;quot;, &amp;quot;data&amp;quot;: { &amp;quot;appKey&amp;quot;: &amp;quot;示例appKey&amp;quot;, &amp;quot;deviceCode&amp;quot;: &amp;quot;示例deviceCode&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;示例时间戳&amp;quot; } }</code></pre> <h3>JAVA示例代码</h3> <pre><code class="language-java">public class AesUtil { /** * 偏移位 */ public static final String VIPARA = &amp;quot;xxxxxx&amp;quot;; /** * 默认编码方式 */ public static final String CHARSET = &amp;quot;utf-8&amp;quot;; /** * 密码 */ public static final String DEFAULT_KEY = &amp;quot;xxxxx&amp;quot;; /** * AES 加密 * * @param content 明文 * @param password 生成秘钥的关键字 * @return */ public static String aesEncrypt(String content, String password) { try { IvParameterSpec zeroIv = new IvParameterSpec(VIPARA.getBytes()); SecretKeySpec key = new SecretKeySpec(password.getBytes(), &amp;quot;AES&amp;quot;); Cipher cipher = Cipher.getInstance(&amp;quot;AES/CBC/PKCS5Padding&amp;quot;); cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv); byte[] encryptedData = cipher.doFinal(content.getBytes(CHARSET)); return Base64.getEncoder().encodeToString(encryptedData); } catch (Exception e) { return null; } } /** * AES 解密 * * @param content 密文 * @param password 生成秘钥的关键字 * @return */ public static String aesDecrypt(String content, String password) { try { byte[] byteMi = Base64.getDecoder().decode(content); IvParameterSpec zeroIv = new IvParameterSpec(VIPARA.getBytes()); SecretKeySpec key = new SecretKeySpec(password.getBytes(), &amp;quot;AES&amp;quot;); Cipher cipher = Cipher.getInstance(&amp;quot;AES/CBC/PKCS5Padding&amp;quot;); cipher.init(Cipher.DECRYPT_MODE, key, zeroIv); byte[] decryptedData = cipher.doFinal(byteMi); return new String(decryptedData, &amp;quot;utf-8&amp;quot;); } catch (Exception e) { return null; } } public static void main(String[] args) { System.out.println(System.currentTimeMillis()); System.out.println(aesEncrypt(System.currentTimeMillis()+&amp;quot;&amp;quot;,DEFAULT_KEY)); }</code></pre>

页面列表

ITEM_HTML