我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Springboot如何使用filter对response内容进行加密方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Springboot如何使用filter对response内容进行加密方式

这篇文章主要介绍Springboot如何使用filter对response内容进行加密方式,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

使用filter对response内容进行加密

编写加密类(AES)

public class AesEncryptUtils {    //参数分别代表 算法名称/加密模式/数据填充方式    private static String algorithmstr = "AES/ECB/PKCS5Padding";    public static String getAlgorithmstr() {        return algorithmstr;    }        public static String encrypt(String content, String encryptKey) throws Exception {        KeyGenerator kgen = KeyGenerator.getInstance("AES");        kgen.init(128);        Cipher cipher = Cipher.getInstance(algorithmstr);        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), "AES"));        byte[] b = cipher.doFinal(content.getBytes("utf-8"));        return Base64.encodeBase64String(b);    }        public static String decrypt(String encryptStr, String decryptKey) throws Exception {        KeyGenerator kgen = KeyGenerator.getInstance("AES");        kgen.init(128);        Cipher cipher = Cipher.getInstance(algorithmstr);        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES"));        byte[] encryptBytes = Base64.decodeBase64(encryptStr);        byte[] decryptBytes = cipher.doFinal(encryptBytes);        return new String(decryptBytes);    }    public static void main(String[] args) throws Exception{        String str  = "pp2bQLjabobRWp2T5Ro5/GlqWCigmkwHYnrOK11VZkTkIA2hSwnEi1sijfTV6Ozd/";        System.out.println(decrypt(str,"f8db034bda44rtkb"));    }}

编写Filter类

@Componentpublic class EncryptFilter implements Filter {    Logger log = LoggerFactory.getLogger(this.getClass());    @Value("${admin.encrypt.excludeUrl}")    private String ignoreStr;    private String[] ignoreArr;    @Override    public void init(FilterConfig filterConfig) throws ServletException {        // TODO Auto-generated method stub    }        private void getFailResponse(HttpServletResponse response) throws IOException {        response.setCharacterEncoding("UTF-8");        response.setContentType("application/json; charset=utf-8");        PrintWriter out = null;        out = response.getWriter();//        out.write("{\n" +//                "    \"status\":"+ Constant.ENCRYPT_FAIL +",\n" +//                "    \"message\": null,\n" +//                "    \"data\": []\n" +//                "}");        //加密后的错误消息        out.write("+D+JO8tuwkrNbxnTTLdqStifmQceT+LlYETnIG/JZKrbAn+gIiqIp3VbzBV1y6R8B7aY53VM2xHa7cY3Osbnqw==");        out.flush();        out.close();    }    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {        if(ignoreArr==null){            ignoreArr = ignoreStr.split(",");        }        HttpServletRequest HttpRequest=(HttpServletRequest)request;        HttpServletResponse HttpResponse=(HttpServletResponse)response;        boolean flag=isIgnore(HttpRequest,ignoreArr);        if(flag) {            try {                chain.doFilter(HttpRequest, HttpResponse);            } catch (IOException e) {                e.printStackTrace();            } catch (ServletException e) {                e.printStackTrace();            }        }else{            try{                //响应处理  包装响应对象 res 并缓存响应数据                ResponseWrapper responseWrapper = new ResponseWrapper((HttpServletResponse) response);                //执行业务逻辑 交给下一个过滤器或servlet处理                chain.doFilter(request, responseWrapper);                byte[] resData = responseWrapper.getResponseData();                //设置响应内容格式,防止解析响应内容时出错//            responseWrapper.setContentType("text/plain;charset=UTF-8");                //加密响应报文并响应                String encryptBASE64 = AesEncryptUtils.encrypt(new String(resData),Constant.ENCRYPT_STR);                PrintWriter out = response.getWriter();                out.print(encryptBASE64);                out.flush();                out.close();            }catch(Exception e){                try {                    getFailResponse((HttpServletResponse)response);                } catch (IOException ioException) {                    ioException.printStackTrace();                }                e.printStackTrace();            }        }}    @Override    public void destroy() {        // TODO Auto-generated method stub    }        public boolean isIgnore(HttpServletRequest request,String[] strArr) {        String path=request.getRequestURI();        for(String ignore:strArr) {            if(path.contains(ignore)) {                return true;            }        }        return false;    }}

下图是对应的application.properties中的配置

Springboot如何使用filter对response内容进行加密方式

其中用到了两个工具类

RequestWrapper

public class RequestWrapper extends HttpServletRequestWrapper {    private String requestBody = null;    //请求体    private HttpServletRequest req = null;    //    private final byte[] body;//保存流的字节数组    private final Map<String, String> reqHeaders=new HashMap<>();    public RequestWrapper(HttpServletRequest request) throws IOException {        super(request);        this.req = request;//        this.reqHeaders = new HashMap<String, String>();//        String sessionStream = getRequestBodyStr(request);//读取流中的参数//        body = sessionStream.getBytes(Charset.forName("UTF-8"));    }    public RequestWrapper(HttpServletRequest request, String requestBody) {        super(request);        this.requestBody = requestBody;        this.req = request;//        this.reqHeaders = request.get;    }        public String getRequestBodyStr(final ServletRequest request) throws IOException {        StringBuilder sb = new StringBuilder();        InputStream inputStream = null;        BufferedReader reader = null;        try {            inputStream = cloneInputStream(request.getInputStream());            reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));            String line = "";            while ((line = reader.readLine()) != null) {                sb.append(line);            }        } catch (IOException e) {            e.printStackTrace();        } finally {            if (inputStream != null) {                inputStream.close();            }            if (reader != null) {                reader.close();            }        }        return sb.toString();    }        public InputStream cloneInputStream(ServletInputStream inputStream) throws IOException {        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();        byte[] buffer = new byte[1024];        int len;        while ((len = inputStream.read(buffer)) > -1) {            byteArrayOutputStream.write(buffer, 0, len);        }        byteArrayOutputStream.flush();        InputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());        return byteArrayInputStream;    }    @Override    public BufferedReader getReader() throws IOException {        return new BufferedReader(new InputStreamReader(getInputStream()));    }    @Override    public ServletInputStream getInputStream() throws IOException {        final ByteArrayInputStream bais = new ByteArrayInputStream(requestBody.getBytes(req.getCharacterEncoding()));        return new ServletInputStream() {            @Override            public boolean isFinished() {                return false;            }            @Override            public boolean isReady() {                return false;            }            @Override            public void setReadListener(ReadListener readListener) {            }            @Override            public int read() throws IOException {                return bais.read();            }        };    }        public void addHeader(String name, String value) {        reqHeaders.put(name, value);    }    @Override    public String getHeader(String name) {//        log.info("getHeader --->{}", name);        String headerValue = super.getHeader(name);        if (reqHeaders.containsKey(name)) {            headerValue = reqHeaders.get(name);        }        return headerValue;    }        @Override    public Enumeration<String> getHeaderNames() {        List<String> names = Collections.list(super.getHeaderNames());        for (String name : reqHeaders.keySet()) {            names.add(name);        }        return Collections.enumeration(names);    }    @Override    public Enumeration<String> getHeaders(String name) {//        log.info("getHeaders name --->>>>>>{}", name);        List<String> values = Collections.list(super.getHeaders(name));//        log.info("getHeaders value --->>>>>>{}", values);        if (reqHeaders.containsKey(name)) {            values = Arrays.asList(reqHeaders.get(name));        }        return Collections.enumeration(values);    }}

ResponseWrapper

public class ResponseWrapper extends HttpServletResponseWrapper {    private ByteArrayOutputStream buffer = null;    private ServletOutputStream out = null;    private PrintWriter writer = null;    public ResponseWrapper(HttpServletResponse response) throws IOException {        super(response);        buffer = new ByteArrayOutputStream();// 真正存储数据的流        out = new WapperedOutputStream(buffer);        writer = new PrintWriter(new OutputStreamWriter(buffer,this.getCharacterEncoding()));    }        @Override    public ServletOutputStream getOutputStream() throws IOException {        return out;    }        @Override    public PrintWriter getWriter() throws UnsupportedEncodingException {        return writer;    }        @Override    public void flushBuffer() throws IOException {        if (out != null) {            out.flush();        }        if (writer != null) {            writer.flush();        }    }    @Override    public void reset() {        buffer.reset();    }        public byte[] getResponseData() throws IOException {        flushBuffer();        return buffer.toByteArray();    }        private class WapperedOutputStream extends ServletOutputStream {        private ByteArrayOutputStream bos = null;        public WapperedOutputStream(ByteArrayOutputStream stream)                throws IOException {            bos = stream;        }        @Override        public void write(int b) throws IOException {            bos.write(b);        }        @Override        public void write(byte[] b) throws IOException {            bos.write(b, 0, b.length);        }        @Override        public boolean isReady() {            return false;        }        @Override        public void setWriteListener(WriteListener writeListener) {        }    }}

写配置类

@Configurationpublic class WebConfiguration {    @Autowired    private EncryptFilter encryptFilter;    @Bean    public FilterRegistrationBean registFilter() {        FilterRegistrationBean registration = new FilterRegistrationBean();        registration.setFilter(encryptFilter);        registration.addUrlPatterns("@Documented@Target({ElementType.METHOD, ElementType.TYPE,})@Retention(RetentionPolicy.RUNTIME)public @interface CryptoDecryptionSecurity {        boolean cryptoDecryption() default true;        boolean requestDecryption() default true;        boolean responseCrypto() default true;}

ps:注解使用

 @CryptoDecryptionSecurity(responseCrypto = false)    @ApiOperation(value = "微信公众号验证业务处理接口")    @GetMapping(value = "/handle/{appid}", produces = "text/plain;charset=utf-8")    public String authHandle(@PathVariable String appid,                             @RequestParam(name = "signature", required = false) String signature,                             @RequestParam(name = "timestamp", required = false) String timestamp,                             @RequestParam(name = "nonce", required = false) String nonce,                             @RequestParam(name = "echostr", required = false) String echostr,                             HttpServletRequest request) {        return weChatMpService.authHandle(appid, signature, timestamp, nonce, echostr, request);    }

创建request解密类

package com.hars.common.infrastructure.utils.filter;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.alibaba.fastjson.TypeReference;import com.hars.common.infrastructure.utils.aes.AesUtil;import com.hars.common.infrastructure.utils.http.HttpContextUtil;import com.hars.common.infrastructure.utils.string.StringUtil;import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Collections;import java.util.Enumeration;import java.util.HashMap;import java.util.LinkedHashSet;import java.util.Map;import java.util.Set;import javax.servlet.ReadListener;import javax.servlet.ServletInputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;import org.springframework.util.Assert;public class DecryptionRequestUtil extends HttpServletRequestWrapper {    private static final String APPLICATION_JSON = "application/json";        private Map<String, String[]> parameterMap;        private InputStream inputStream;    private final boolean valueValid = true;    public DecryptionRequestUtil(HttpServletRequest request, String password) {        super(request);        String encrypt;        String contentType = request.getHeader("Content-Type");        if (contentType != null && contentType.contains(APPLICATION_JSON)) {            //json            String bodyStr = HttpContextUtil.getBodyString(request);            if (StringUtil.isBlank(bodyStr)){                return;            }            encrypt = (String) JSON.parseObject(bodyStr).get("encrypt");        } else {            // url            encrypt = request.getParameter("encrypt");        }        String jsonData = AesUtil.decrypt(encrypt, password);        if (StringUtil.isBlank(jsonData)){            return;        }        if (contentType != null && contentType.contains(APPLICATION_JSON)) {            if (this.inputStream == null) {                this.inputStream = new DecryptionInputStream(new ByteArrayInputStream(jsonData.getBytes()));            }        }        parameterMap = buildParams(jsonData);    }    private Map<String, String[]> buildParams(String class="lazy" data-src) {        Map<String, String[]> map = new HashMap<>();        Map<String, String> params = JSONObject.parseObject(class="lazy" data-src, new TypeReference<Map<String, String>>() {        });        for (String key : params.keySet()) {            map.put(key, new String[]{params.get(key)});        }        return map;    }    @Override    public String getParameter(String name) {        String[] values = getParameterMap().get(name);        if (valueValid){            if (values != null) {                return (values.length > 0 ? values[0] : null);            }            return super.getParameter(name);        }else {            return (values.length > 0 ? values[0] : null);        }    }    @Override    public String[] getParameterValues(String name) {        String[] values = getParameterMap().get(name);        if (valueValid){            if (values != null) {                return values;            }            return super.getParameterValues(name);        }else {            return values;        }    }    @Override    public Enumeration<String> getParameterNames() {        Map<String, String[]> multipartParameters = getParameterMap();        if (valueValid){            if (multipartParameters.isEmpty()) {                return super.getParameterNames();            }        }else {            if (multipartParameters.isEmpty()) {                return null;            }        }        Set<String> paramNames = new LinkedHashSet<>();        Enumeration<String> paramEnum = super.getParameterNames();        while (paramEnum.hasMoreElements()) {            paramNames.add(paramEnum.nextElement());        }        paramNames.addAll(multipartParameters.keySet());        return Collections.enumeration(paramNames);    }    @Override    public Map<String, String[]> getParameterMap() {        if (valueValid){            return parameterMap == null ? super.getParameterMap() : parameterMap;        }else {            return parameterMap == null ? new HashMap<>() : parameterMap;        }    }    @Override    public ServletInputStream getInputStream() throws IOException {        if (valueValid){            return this.inputStream == null ? super.getInputStream() : (ServletInputStream) this.inputStream;        }else {            return this.inputStream == null ? null : (ServletInputStream) this.inputStream;        }    }        private class DecryptionInputStream extends ServletInputStream {        private final InputStream sourceStream;                public DecryptionInputStream(InputStream sourceStream) {            Assert.notNull(sourceStream, "Source InputStream must not be null");            this.sourceStream = sourceStream;        }        @Override        public int read() throws IOException {            return this.sourceStream.read();        }        @Override        public void close() throws IOException {            super.close();            this.sourceStream.close();        }        @Override        public boolean isFinished() {            return false;        }        @Override        public boolean isReady() {            return false;        }        @Override        public void setReadListener(ReadListener readListener) {        }    }}

创建response加密类

package com.hars.common.infrastructure.utils.filter;import java.io.ByteArrayOutputStream;import java.io.IOException;import javax.servlet.ServletOutputStream;import javax.servlet.WriteListener;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServletResponseWrapper;public class ResponseWrapperUtil extends HttpServletResponseWrapper {    private ByteArrayOutputStream buffer;    private ServletOutputStream out;    public ResponseWrapperUtil(HttpServletResponse httpServletResponse) {        super(httpServletResponse);        buffer = new ByteArrayOutputStream();        out = new WrapperOutputStream(buffer);    }    @Override    public ServletOutputStream getOutputStream() throws IOException {        return out;    }    @Override    public void flushBuffer() throws IOException {        if (out != null) {            out.flush();        }    }    public byte[] getContent() throws IOException {        flushBuffer();        return buffer.toByteArray();    }    private static class WrapperOutputStream extends ServletOutputStream {        private ByteArrayOutputStream bos;        WrapperOutputStream(ByteArrayOutputStream bos) {            this.bos = bos;        }        @Override        public void write(int b)                throws IOException {            bos.write(b);        }        @Override        public boolean isReady() {            // TODO Auto-generated method stub            return false;        }        @Override        public void setWriteListener(WriteListener arg0) {            // TODO Auto-generated method stub        }    }}

创建AES加密工具类

package com.hars.common.infrastructure.utils.aes;import com.hars.common.infrastructure.utils.string.StringUtil;import java.nio.charset.StandardCharsets;import java.util.Base64;import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class AesUtil {        public static String decrypt(String content, String password) {        try {            if (StringUtil.isBlank(content) || StringUtil.isBlank(password)) {                return null;            }            byte[] encryptByte = Base64.getDecoder().decode(content);            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");            cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(password.getBytes(), "AES"));            byte[] decryptBytes = cipher.doFinal(encryptByte);            return new String(decryptBytes);        } catch (Exception e) {            log.error(e.getMessage(), e);            return null;        }    }        public static String encrypt(String content, String password) {        try {            if (StringUtil.isBlank(content) || StringUtil.isBlank(password)) {                return null;            }            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");            cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(password.getBytes(), "AES"));            byte[] encryptStr = cipher.doFinal(content.getBytes(StandardCharsets.UTF_8));            return Base64.getEncoder().encodeToString(encryptStr);        } catch (Exception e) {            log.error(e.getMessage(), e);            return null;        }    }

创建加解密Filter类

package com.hars.user.infrastructure.filter;import com.alibaba.fastjson.JSON;import com.hars.common.infrastructure.utils.aes.AesUtil;import com.hars.common.infrastructure.utils.filter.DecryptionRequestUtil;import com.hars.common.infrastructure.utils.filter.ResponseWrapperUtil;import com.hars.common.infrastructure.validation.security.CryptoDecryptionSecurity;import com.hars.result.infrastructure.advice.Response;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.Map;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.beans.factory.BeanFactoryUtils;import org.springframework.context.ApplicationContext;import org.springframework.core.annotation.AnnotationAwareOrderComparator;import org.springframework.web.method.HandlerMethod;import org.springframework.web.servlet.HandlerExecutionChain;import org.springframework.web.servlet.HandlerMapping;public class CryptoDecryptionFilter implements Filter {    //方法映射集    private List<HandlerMapping> handlerMappings;    public CryptoDecryptionFilter(ApplicationContext applicationContext) {        Map<String, HandlerMapping> matchingBeans = BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext,                HandlerMapping.class, true, false);        if (!matchingBeans.isEmpty()) {            this.handlerMappings = new ArrayList<>(matchingBeans.values());            AnnotationAwareOrderComparator.sort(this.handlerMappings);        }    }    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        HttpServletRequest httpServletRequest = (HttpServletRequest) request;        HttpServletResponse httpServletResponse = (HttpServletResponse) response;        //判断方法上是否存在注解,如果不存在,默认加解密        //类上的注解        CryptoDecryptionSecurity classFlag = null;        //方法上的注解        CryptoDecryptionSecurity methodFlag = null;        try {            HandlerExecutionChain handlerExecutionChain = getHandler(httpServletRequest);            Object handler = handlerExecutionChain != null ? handlerExecutionChain.getHandler() : null;            if (handler instanceof HandlerMethod) {                HandlerMethod method = (HandlerMethod) handler;                classFlag = method.getBeanType().getAnnotation(CryptoDecryptionSecurity.class);                methodFlag = method.getMethodAnnotation(CryptoDecryptionSecurity.class);                //如果方法注解存在,且不加密,则直接返回                if (methodFlag != null && !methodFlag.cryptoDecryption()) {                    chain.doFilter(request, response);                    return;                }                //如果类注解存在,且不加密,则直接返回                if (classFlag != null && !classFlag.cryptoDecryption()) {                    chain.doFilter(request, response);                    return;                }            }        } catch (Exception e) {            response.setContentType("application/json; charset=UTF-8");            response.getWriter().write(JSON.toJSONString(Response.error("该请求无效", 601)));            return;        }        CryptoDecryptionSecurity currentFlag = null;        if (methodFlag != null) {            currentFlag = methodFlag;        } else if (classFlag != null) {            currentFlag = classFlag;        }        //加解密密码        String password = "Hbg584782648!@hb";        ResponseWrapperUtil responseWrapper = null;        //加解密处理        if (currentFlag == null || (currentFlag.requestDecryption() && currentFlag.responseCrypto())) {            ServletRequest requestWrapper = new DecryptionRequestUtil(httpServletRequest, password);            responseWrapper = new ResponseWrapperUtil(httpServletResponse);            chain.doFilter(requestWrapper, responseWrapper);        } else if (currentFlag.requestDecryption() && !currentFlag.responseCrypto()) {            ServletRequest requestWrapper = new DecryptionRequestUtil(httpServletRequest, password);            chain.doFilter(requestWrapper, response);        } else if (!currentFlag.requestDecryption() && currentFlag.responseCrypto()) {            responseWrapper = new ResponseWrapperUtil(httpServletResponse);            chain.doFilter(request, responseWrapper);        } else {            chain.doFilter(request, response);        }        if (responseWrapper != null) {            byte[] content = responseWrapper.getContent();//获取返回值            //判断是否有值            if (content.length > 0) {                String result = new String(content, "UTF-8");                //加密                String encryptStr = AesUtil.encrypt(result, password);                //把返回值输出到客户端                ServletOutputStream out = response.getOutputStream();                out.write(encryptStr.getBytes());                out.flush();            }        }    }        private HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {        if (this.handlerMappings != null) {            for (HandlerMapping hm : this.handlerMappings) {                HandlerExecutionChain handler = hm.getHandler(request);                if (handler != null) {                    return handler;                }            }        }        return null;    }}

定义过滤器的拦截路径

@Autowired    private ApplicationContext applicationContext;        @Bean    public FilterRegistrationBean encryptionDataFilterRegistration() {        FilterRegistrationBean<CryptoDecryptionFilter> registration = new FilterRegistrationBean<>();        registration.setFilter(new CryptoDecryptionFilter(applicationContext));        registration.addUrlPatterns("/*");        registration.setName("cryptoDecryptionFilter");        registration.setOrder(2);        return registration;    }

以上是“Springboot如何使用filter对response内容进行加密方式”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Springboot如何使用filter对response内容进行加密方式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Springboot如何使用filter对response内容进行加密方式

这篇文章主要介绍Springboot如何使用filter对response内容进行加密方式,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用filter对response内容进行加密编写加密类(AES)/** * a
2023-06-29

如何在JAVA中使用MD5加密对密码进行加密

本篇文章为大家展示了如何在JAVA中使用MD5加密对密码进行加密,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.新建Md5.javapackage com.loger.md5;import jav
2023-05-31

如何使用 PHP 内置函数对数据进行加密和解密?

使用 php 内置函数进行加密和解密:加密: 使用 openssl_encrypt() 函数,指定算法(如 aes-256-cbc)和密码短语对数据进行加密。解密: 使用 openssl_decrypt() 函数,使用相同的算法和密码短语对
如何使用 PHP 内置函数对数据进行加密和解密?
2024-04-22

如何在Java中使用RSA加密对密码进行加密解密

这期内容当中小编将会给大家带来有关如何在Java中使用RSA加密对密码进行加密解密,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。具体如下:public static void main(String[]
2023-05-31

如何使用vbs对QWERTY密码进行加密与解密

这篇文章主要介绍如何使用vbs对QWERTY密码进行加密与解密,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在做Arthurs Online Riddle的时候有这么一道题目: If QWERTY = ABCDEF
2023-06-08

C#如何使用SHA1算法对密码进行加密

这篇文章给大家分享的是有关C#如何使用SHA1算法对密码进行加密的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。C#中如何使用SHA1对密码进行加密呢?在这里呢小编创建的是ASP.NET Web 项目应用程序,wi
2023-06-14

如何使用openssl对文件进行加密和解密

这篇文章主要介绍如何使用openssl对文件进行加密和解密,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!openssl是一个安全套接字层密码库,囊括主要的密码算法、常用密钥、证书封装管理功能及实现ssl协议。Open
2023-06-27

Linux下如何使用cryptsetup对磁盘进行加密

这篇文章主要介绍Linux下如何使用cryptsetup对磁盘进行加密,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!cryptsetup是linux下的一个分区加密工具,cryptsetup是分区级别的加密,比文件系
2023-06-27

如何在java中使用RSA算法对密码进行加密与解密

本篇文章给大家分享的是有关如何在java中使用RSA算法对密码进行加密与解密,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言: RSA是第一个比较完善的公开密钥算法,它既能
2023-05-31

如何对Linux上使用LUKS加密的部分进行备份

这篇文章主要讲解了“如何对Linux上使用LUKS加密的部分进行备份”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何对Linux上使用LUKS加密的部分进行备份”吧!一个解决方案: Bds
2023-06-12

如何使用WinLicense对软件进行加密保护和授权

使用WinLicense对软件进行加密保护和授权的步骤如下:1. 下载并安装WinLicense软件。可以从官方网站或其他可信来源下载WinLicense的安装程序。2. 打开WinLicense软件。打开WinLicense后,会出现一个
2023-09-22

Java如何使用Collections.sort对中文进行排序方式

本篇文章为大家展示了Java如何使用Collections.sort对中文进行排序方式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。使用Collections.sort对中文进行排序使用collec
2023-06-25

springboot中如何使用自定义注解实现加解密及脱敏方式

这篇文章主要介绍springboot中如何使用自定义注解实现加解密及脱敏方式,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!自定义注解实现加解密及脱敏定义自定义注解@Documented@Target({Element
2023-06-22

如何使用PHP进行文件加密和解密操作?(PHP加密和解密文件的常用方法是什么?)

PHP文件加密和解密指南本文提供了各种方法来使用PHP进行文件加密和解密,包括对称和非对称加密。对称加密使用相同的密钥进行加解密,而非对称加密使用公钥和私钥对。加密步骤包括选择算法、生成密钥和对文件执行加密操作。解密步骤包括获取密钥并对文件进行解密。文章还提供了安全注意事项和替代方法,例如PHPmcrypt扩展、SodiumPHP库和HashicorpVault。选择最合适的方法取决于安全级别、性能、兼容性、易用性等因素。
如何使用PHP进行文件加密和解密操作?(PHP加密和解密文件的常用方法是什么?)
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录