温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

spring mvc rest接口选择性加密解密实例分析

发布时间:2022-07-26 17:48:25 来源:亿速云 阅读:203 作者:iii 栏目:开发技术

这篇文章主要介绍了spring mvc rest接口选择性加密解密实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇spring mvc rest接口选择性加密解密实例分析文章都会有所收获,下面我们一起来看看吧。

    1.需求

    spring mvc rest接口以前是采用https加密的,但是现在需要更加安全的加密。
    而且不是对所有的接口进行加密,是对部分接口进行加密,接口返回值进行解密。

    2.分析

    实现方式有两种:

    • 1.Aspect + Annotation

    • 2.interceptor + requestParameter

    第一种方式是最灵活的:自定义注解,然后在Aspect中对注解的方法进行处理。

    第二种方法也能实现:自定义拦截器加请求参数与返回参数,即参数中有一个参数控制是否加密解密。

    第二种方式很明显参数冗余,管理不变,使用麻烦。
    第一种参数就很好了,扩展容易,使用容易,提倡使用。

    3.实现

    3.1注解方式

    3.1.1定义注解
    package com.annotation;
    
    import java.lang.annotation.*;
    
    @Target(ElementType.METHOD)
    //使用在方法级别上
    @Retention(RetentionPolicy.RUNTIME)
    //运行时有效
    @Documented
    //生成文档
    public @interface Encryption {
    }
    3.1.2定义注解Aspect切面
    package com.aop;
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.annotation.After;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.springframework.stereotype.Component;
    @Aspect
    //Aspect注解
    @Component
    //spring bean的自动注解
    //aop切面
    public class EncryptionAspect {
    /**
    * 加密切点
    */
    @Pointcut("@annotation(com.startimes.selfserviceApp.annotation.Encryption)")
    public void encryptionPointcut(){
    }
    
    /**
    * 前置通知--解密
    * @param joinPoint
    */
    @Before("encryptionPointcut()")
    public void doBefore(JoinPoint joinPoint){
    System.out.println("encryptionPointcut");
    }
    
    /**
    * 后置通知--加密
    * @param joinPoint
    */
    @After("encryptionPointcut()")
    public void doAfter(JoinPoint joinPoint){
    System.out.println("encryptionPointcutAfter");
    }
    }
    3.1.3使用

    在方法前面加入注解:
    @Encryption

    spring mvc rest接口选择性加密解密实例分析

    spring mvc rest接口选择性加密解密实例分析

    3.2拦截器

    3.2.1定义拦截器
    package com.interceptor;
    
    import org.springframework.ui.ModelMap;
    import org.springframework.web.context.request.WebRequest;
    import org.springframework.web.context.request.WebRequestInterceptor;
    public class EncryptionInterceptor implements WebRequestInterceptor {
    @Override
    public void preHandle(WebRequest request) throws Exception {
    //TODO:自定义代码
    System.out.println("preHandle");
    }
    @Override
    public void postHandle(WebRequest request, ModelMap model) throws Exception {
    //TODO:自定义代码
    System.out.println("postHandle");
    }
    @Override
    public void afterCompletion(WebRequest request, Exception ex) throws Exception {
    //TODO:自定义代码
    System.out.println("afterCompletion");
    }
    }
    3.2.2配置拦截器

    spring mvc rest接口选择性加密解密实例分析

    3.2.3使用

    spring mvc rest接口选择性加密解密实例分析

    不使用参数,如果使用参数就在拦截器里判断参数,然后进行相应的处理。

    4.加密

    4.1对称加密

    对于无需加密的接口采用数字签名加密,即https
    对于需要加密的接口采用将MD5(session)作为密钥的对称加密
    缺点:需要服务器与客户端有相同的session

    4.2非对称加密

    对于无需加密的接口采用非对称加密,即https+双向认证+自定义证书
    对于需要加密的接口采用非对称加密。

    5.加密算法

    5.1MD5算法

    MD5 用的是 哈希函数,它的典型应用是对一段信息产生 信息摘要,以 防止被篡改。严格来说,MD5 不是一种 加密算法 而是 摘要算法。无论是多长的输入,MD5 都会输出长度为 128bits 的一个串 (通常用 16 进制 表示为 32 个字符)。

    5.2SHA1算法

    SHA1 是和 MD5 一样流行的 消息摘要算法,然而 SHA1 比 MD5 的 安全性更强。对于长度小于 2 ^ 64 位的消息,SHA1 会产生一个 160 位的 消息摘要。基于 MD5、SHA1 的信息摘要特性以及 不可逆 (一般而言),可以被应用在检查 文件完整性 以及 数字签名 等场景。

    5.3HMAC算法

    HMAC 是密钥相关的 哈希运算消息认证码(Hash-based Message Authentication Code),HMAC 运算利用 哈希算法 (MD5、SHA1 等),以 一个密钥 和 一个消息 为输入,生成一个 消息摘要 作为 输出。
    HMAC 发送方 和 接收方 都有的 key 进行计算,而没有这把 key 的第三方,则是 无法计算 出正确的 散列值的,这样就可以 防止数据被篡改。

    5.4AES/DES/3DES算法

    AES、DES、3DES 都是 对称 的 块加密算法,加解密 的过程是 可逆的。常用的有 AES128、AES192、AES256 (默认安装的 JDK 尚不支持 AES256,需要安装对应的 jce 补丁进行升级 jce1.7,jce1.8)。

    5.5DES算法

    DES 加密算法是一种 分组密码,以 64 位为 分组对数据 加密,它的 密钥长度 是 56 位,加密解密 用 同一算法。
    DES 加密算法是对 密钥 进行保密,而 公开算法,包括加密和解密算法。这样,只有掌握了和发送方 相同密钥 的人才能解读由 DES加密算法加密的密文数据。因此,破译 DES 加密算法实际上就是 搜索密钥的编码。对于 56 位长度的 密钥 来说,如果用 穷举法 来进行搜索的话,其运算次数为 2 ^ 56 次。

    5.63DES算法

    是基于 DES 的 对称算法,对 一块数据 用 三个不同的密钥 进行 三次加密,强度更高。

    5.7AES算法

    AES 加密算法是密码学中的 高级加密标准,该加密算法采用 对称分组密码体制,密钥长度的最少支持为 128 位、 192 位、256 位,分组长度 128 位,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的 区块加密标准。
    AES 本身就是为了取代 DES 的,AES 具有更好的 安全性、效率 和 灵活性。

    5.8RSA算法

    RSA 加密算法是目前最有影响力的 公钥加密算法,并且被普遍认为是目前 最优秀的公钥方案 之一。RSA 是第一个能同时用于 加密 和 数字签名 的算法,它能够 抵抗 到目前为止已知的 所有密码攻击,已被 ISO 推荐为公钥数据加密标准。
    RSA 加密算法 基于一个十分简单的数论事实:将两个大 素数 相乘十分容易,但想要对其乘积进行 因式分解 却极其困难,因此可以将 乘积 公开作为 加密密钥。

    5.9ECC算法

    ECC 也是一种 非对称加密算法,主要优势是在某些情况下,它比其他的方法使用 更小的密钥,比如 RSA 加密算法,提供 相当的或更高等级 的安全级别。不过一个缺点是 加密和解密操作 的实现比其他机制 时间长 (相比 RSA 算法,该算法对 CPU 消耗严重)。

    6.加密算法比较

    6.1散列算法

    名称

    安全性

    速度

    SHA-1

    MD5

    6.2对称加密算法

    名称

    密钥长度

    运行速度

    安全性

    资源消耗

    DES

    56

    较快

    3DES

    112、168

    AES

    128、192、256

    6.3非对称加密算法比较

    名称

    成熟度

    安全性

    运算速度

    资源消耗

    RSA

    ECC

    关于“spring mvc rest接口选择性加密解密实例分析”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“spring mvc rest接口选择性加密解密实例分析”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI