数据安全设计

引言:在 web 程序中,数据加密非常重要,对于不用解密的数据,如密码等,一般使用 md5 的加密技术,对于需要解密的数据,我们常用 AES 加密,现在我们来讨论下如何提高数据的安全性。

一、对私钥用公钥加密,然后数据进行多次对称加密
我觉得,数据的加首先双方约定一个
公钥:ABCDEFGHIJKLMNOP
签名:QWERTYHJKDLOFJSK
数据加密次数:n

  • 加密随机密钥

    首先对公钥进行MD5加密,转大写并截取 16 位作为newKey;

    然后随机生成 16 位的随机密钥 randomKey,对randomKey 进行 AES 标准加密(偏移量和私钥一样,加密方式为为:“AES/CBC/PKCS5Padding”)得到加密的秘钥realKey;

  • 双方约定数据封装形式+签名-> data,然后对其 MD5 加密转大写成为newSign;

    再对上面的随机秘钥 randomKey 进行 MD5 加密,截取 16 位作为数据传输的 json 进行 AES 标准进行加密,json 一般都是需要传输的数据+newSign;(这里 AES 根据约定进行轮换 n 次)

    下面给出流程示例
    加密示例

下面贴出代码

package com.dao.xu;


import com.alibaba.fastjson.JSON;
import org.apache.commons.codec.digest.DigestUtils;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.*;
/**
 *  安全设计
 *
 * @author 阿导
 * @CopyRight 万物皆导
 * @Created 2019/5/15 20:26:00
 */
public class WWJD {
   
    /**
     * 加密公钥
     */
    private final static String COMMON_KEY = "wwjdwwjdwwjdwwjdwwjdwwjdwwjdwwjd";
    /**
     * 签名秘钥
     */
    private final static String SIGN_KEY = "wwjdwwjdwwjdwwjdwwjdwwjdwwjdwwjd";
    /**
     * 约定次数
     */
    private final static Integer N = 10;
    /**
     * SIGN
     */
    private final static String SIGN = "sign";
    /**
     * 随机秘钥集合
     */
    private final static String KEYS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz*$";
    /**
     * 默认字符集
     */
    private final static String DEFAULT_CODE = "UTF-8";
    /**
     * 零
     */
    private final static Integer ZERO = Integer.valueOf(0);
    /**
     * 引号
     */
    public static final String QUOTES = "\"";
    /**
     * 逗号
     */
    public static final String COMMA = ",";
    /**
     * 冒号
     */
    public static final String COLON = ":";
    /**
     * 左大括号
     */
    public static final String BRACES_LEFT = "{";
    /**
     * 右大括号
     */
    public static final String BRACES_RIGHT = "}";

    /**
     * 将字符串MD5加码 生成32位md5码
     *
     * @param inStr
     * @return java.lang.String
     * @author 阿导
     * @time 2019/5/15 20:23:00
     */
    private static String md5(String inStr) {
   
        try {
   
            return DigestUtils.md5Hex(inStr.getBytes(DEFAULT_CODE));
        } catch (UnsupportedEncodingException e) {
   
            throw new RuntimeException("MD5签名过程中出现错误");
        }
    }


    /**
     * AES加密
     *
     * @param cleartext
     * @param rKey
     * @return java.lang.String
     * @author 阿导
     * @time 2019/5/15 20:24:00
     */
    private static String 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值