`
y806839048
  • 浏览: 1120542 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

加密思路(二)

阅读更多

 

简单的一层加密(直接用key来加密数据,接收方直接用key解密数据),之前的一篇是key本身也加密:接收方先解密key,再用解密的key解密数据--加解密(对称加密)--类似https加密思路

 

客户端调用是加密,被调用服务器上用切面拦截校验加密的后的内容传入前后是否一致(验签)和key是否一致,一致就放行

 

 对称加密:des,aes---用固定的key加密明文,用同样的key解密密文,做的好一点可以这个key本身用rsa公钥加密,接收方用rsa私钥解密,再用得到的key解密密文---速度快(aes位数长)

 

非对称加密:rsa,用公钥加密,私钥解密---或者私钥加签,公钥验签(验签不会解密,只是在和公钥运行算一次看看结果是否符合预期?)---速度慢

即:

 

1.使用AES加密每次请求随机生成AES_KEY,对明文进行加密,AES加密比起RAS加密效率上高很多,但是安全性要低很多。

2.使用RAS对AES_KEY加密,之所以不直接使用RAS对数据加密,是因为数据的可变性,不定长度的数据,使用RAS非对称加密的时间不定,数据量越大加密时间越

3.使用RAS签名,保证发送方,和防止数据篡改。

 

 

 

 

 

加密:

 

 

 @Test

    public void insureApply() throws Exception {

        Map<String, Object> stringObjectMap = new HashMap<String, Object>();

        SanxaingPackageRequest sn = new SanxaingPackageRequest();

        sn.setApplyNo("A00431003011809180001");

        sn.setZipType("allFile");

        sn.setPutoutNo("111");

        stringObjectMap= MapUtil.beansToMap(sn);

        String sign = SignUtils.signOuter(stringObjectMap, "a6e237fc-5a53-4e29-a961-813de44a9929");

        JSONObject jsonObj = (JSONObject) JSON.toJSON(stringObjectMap);

        jsonObj.put("sign", sign);

        jsonObj.put("key", "bankApi");

 

        String reslut = HttpClientUtil.httpJsonPost("http://localhost:8080/bank-gateway/sanxiang/TYZDFileUploadData",jsonObj.toJSONString());

        System.out.println(reslut);

    }

 

 

 

 

切面校验:

 

 

bank-api.key=bankApi,a6e237fc-5a53-4e29-a961-813de44a9929

 

 

 

package com.houbank.bank.common.util.aspectj;

 

 

import com.houbank.bank.common.bean.enums.CodeEnum;

import com.houbank.bank.common.bean.req.BaseRequest;

import com.houbank.bank.util.base.MapUtil;

import com.houbank.bank.util.base.SignUtils;

import com.houbank.bank.util.exception.BankException;

import com.houbank.bank.util.exception.ParamException;

import org.apache.commons.lang.StringUtils;

import org.aspectj.lang.JoinPoint;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Before;

import org.aspectj.lang.annotation.Pointcut;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Component;

 

import java.util.Map;

 

/**

 * @author zhangzhile

 *         controller 请求验证签名

 */

@Component

@Aspect

public class ControllerSignAspect extends AbstractLogAspect {

 

    private static final Logger logger = LoggerFactory.getLogger(ControllerSignAspect.class);

 

    @Pointcut("@within(org.springframework.web.bind.annotation.RestController)")

    private void anySpringRestController() {

    }

    @Value("${bank-api.key}")

    private String appKey;

 

    /**

     * 所有controller

     */

    @Pointcut("execution(* com.houbank.bank.*.controller..*.*(..))")

    private void allController() {

    }

    /**

     * callback包

     */

    @Pointcut("execution(* com.houbank.bank.*.controller.callback.*.*(..))")

    private void callbackController() {

    }

    /**

     * task包

     */

    @Pointcut("execution(* com.houbank.bank.*.controller.task.*.*(..))")

    private void taskController() {

    }

    /**

     * web包

     */

    @Pointcut("execution(* com.houbank.bank.*.controller.web.*.*(..))")

    private void webController() {

    }

    /**

     * BaseController

     */

    @Pointcut("execution(* com.houbank.bank.common.controller.BaseController.*(..)))")

    private void baseController() {

    }

    

    @Pointcut("execution(* com.houbank.bank.*.controller.nosign.*.*(..))")

    private void nosignController() {

    }

    @Pointcut("execution(* com.houbank.bank.*.controller.SanxiangH5Controller.*(..))")

    private void sanxiangH5Controller() {

    }

 

    @Before(value = "allController()" +

            "&&!callbackController()" +

            "&&!taskController()" +

            "&&!webController()" +

            "&&!baseController()" + 

            "&&!nosignController()"+

            "&&!sanxiangH5Controller()")

    public void req(JoinPoint joinPoint) throws Throwable {

    if(joinPoint.getArgs().length > 0){

    Object jsonObject = (Object) joinPoint.getArgs()[0];

            Map<String, Object> bodyMap = MapUtil.beansToMap(jsonObject);

            String key = (String) bodyMap.get("key");

            String sign = (String) bodyMap.get("sign");

            if (StringUtils.isBlank(key) || StringUtils.isBlank(sign)) {

                if (! (jsonObject instanceof BaseRequest)) {

                    throw new BankException("需要验签的参数未继承BaseRequest, 参数类型:"+jsonObject.getClass());

                }

                throw new ParamException("请检查参数key,sign");

            }

            String secret = null;

            String[] split = appKey.split(";");

            for (String str : split) {

                if (str.split(",")[0].trim().equals(key)) {

                    secret = str.split(",")[1].trim();

                    if (logger.isDebugEnabled()) {

                        logger.debug("对方key=" + key + ",获取的秘钥secret=" + secret);

                    }

                }

            }

            if (StringUtils.isBlank(secret)) {

                logger.error("秘钥为空,对方key=" + key + ",我方appKey集合=" + appKey);

                throw new ParamException("key不匹配");

            } else {

                bodyMap.remove("sign");

                bodyMap.remove("key");

                if (!SignUtils.signOuter(bodyMap, secret,sign)) {

                    throw new ParamException(CodeEnum.CODE_9998.getMsg());

                }

            }

    }

    }

 

    @Override

    public Boolean isLogExceptionArgs() {

        return true;

    }

}

 

 加签,加密过程:

 



 

 

  • 大小: 125.9 KB
分享到:
评论

相关推荐

    易语言加密思路演示

    本文将围绕“易语言加密思路演示”这一主题,详细讲解加密技术在易语言中的应用以及实现原理。 加密是信息安全的重要组成部分,其目的是保护数据不被未经授权的个人或实体访问。在易语言中,加密主要应用于软件保护...

    加密狗实现思路

    本文详细地介绍了加密狗实现的思路和方法,是想进行加密狗产品开发的入门资料。

    易语言加密思路演示源码.rar

    本资源“易语言加密思路演示源码.rar”是一个压缩包,包含了易语言编程中关于加密技术的示例代码和思路,对于学习易语言加密编程的初学者来说,是非常宝贵的参考资料。 在信息安全领域,加密是一种常见的保护数据...

    易语言加密思路演示源码.7z

    在这个"易语言加密思路演示源码.7z"压缩包中,我们可以看到是关于易语言实现加密技术的一个示例项目。下面我们将深入探讨易语言中的加密思路以及相关的编程知识。 1. **加密的基本概念** 加密是一种信息安全技术,...

    针对被易赛通数据泄露防护客户端加密的文件的解密思路

    针对被易赛通数据泄露防护客户端加密的文件的解密思路 本文主要讨论了如何对被易赛通数据泄露防护客户端加密的文件进行解密的思路。由于工作中需要处理敏感数据,公司要求电脑上必须安装易赛通数据泄露防护客户端,...

    DES加密算法 C实现 二维数组

    本篇文章将深入探讨DES加密算法的基本原理以及如何使用二维数组在C语言中实现一次迭代。 DES算法的核心是64位的数据块和56位的密钥,经过16轮的迭代过程,每轮包含一系列的置换、异或和非线性函数。以下是DES加密的...

    易语言源码易语言加密思路演示源码.rar

    易语言源码易语言加密思路演示源码.rar

    QT 实现AES 加密算法

    在QT中实现AES(Advanced Encryption Standard)加密算法,可以帮助开发者确保数据的安全性,防止未授权的访问和篡改。AES是目前国际上广泛采用的一种块密码标准,因其高效性和安全性而备受推崇。 AES加密算法基于...

    软件加密狗破解的一般思路

    软件加密狗破解的一般思路 不要被也些打着加密的软件骗了啊

    软件加密狗破解思路和方法

    硬件加密锁,俗程“加密锁”,对于软件加密锁的破解大抵可以分为三种方法

    加密解密思路

    标题中的“加密解密思路”指的是在信息技术领域中,如何对数据进行安全保护的重要概念。在互联网通信中,为了确保信息的隐私和安全性,我们通常会使用加密算法将明文转化为密文,防止非授权人员获取敏感信息。解密则...

    MD5加密技术

    这种认识是不对的,采用MD5加密技术其主体思路与EncryptionTool类中encrypt方法是相同的,但加密的具体规则则是由该类中的hex方法来决定的,该方法具备了“密钥”的功能——用户可以自定义或修改hex方法中的for循环...

    基于C++实现对常用加密算法改进及对抗思路源码+项目说明(含哈希、对称、校验码、编码格式等加密).zip

    基于C++实现对常用加密算法改进及对抗思路源码+项目说明(含哈希、对称、校验码、编码格式等加密).zip基于C++实现对常用加密算法改进及对抗思路源码+项目说明(含哈希、对称、校验码、编码格式等加密).zip基于C++...

    信息安全实习二 分组加密实现了图形化界面

    实习项目“信息安全实习二 分组加密实现了图形化界面”显然聚焦于将这种加密算法应用于实际操作,通过图形化用户界面(GUI)使用户能够更加直观、方便地进行数据加密和解密。以下是关于这个主题的详细知识: 1. **...

    文件移位加密与解密

    从给定的文件信息来看,本文档主要涉及的是文件移位加密与解密技术的C语言实现,这是一项基础但非常实用的加密方法,尤其在早期计算机科学领域中占有重要地位。下面,我们将深入探讨这一主题,包括其背景、原理、...

    加密网络流量测量和分析.pdf

    流量加密是目前互联网流量的主流方式,本报告分为三个方面讨论流量加密的问题: (1) 由于加密流量算法本身造成流量的随机性,因而直接针对加密流量的分类方法将...传输模式识别基本思路 加密视频指纹提取 实验结果 小结

    dna加密_混沌系统_混沌系统图像_加密算法_混沌加密_DNA加密

    这种方法利用了DNA的存储密度高、稳定性好以及错误校验能力强等特点,为加密领域带来了新的思路。 接下来,我们讨论“混沌系统”和“混沌系统图像”。混沌系统是一种看似无序但又遵循确定性规则的动态系统,它的...

    最全的android图片加密

    你可以通过阅读源代码,理解其设计思路和实现细节。这个项目可能会包含一个主Activity,用于展示和选择图片,以及相关的加密解密服务类。同时,项目中也可能包含了处理加密解密逻辑的辅助类和工具函数。 总的来说,...

Global site tag (gtag.js) - Google Analytics