安卓使用Des NoSuchProviderException

调用的时候: mPassword = DES.encrypt(null, password, "UTF-8");

encrypt方法会返回“加密失败”,报异常java.security.NoSuchProviderException: Provider not available: SunJCE,是为什么呢, 下面是Des的代码

 package com.shishi.utils;

import java.security.Key;

import javax.crypto.Cipher;

/**
 * 
 * 
 * 
 * @author vlinux
 * 
 * 
 */

public class DES {

    private static String strDefaultKey = "aaaa";

    private Cipher encryptCipher = null;

    private Cipher decryptCipher = null;

    /**
     * 
     * 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[]
     * hexStr2ByteArr(String strIn) 互为可逆的转换过程
     * 
     * @param arrB
     * 
     *            需要转换的byte数组
     * 
     * @return 转换后的字符串
     * 
     * @throws Exception
     * 
     *             本方法不处理任何异常,所有异常全部抛出
     */

    public static String byteArr2HexStr(byte[] arrB) throws Exception {

        int iLen = arrB.length;

        // 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍

        StringBuffer sb = new StringBuffer(iLen * 2);

        for (int i = 0; i < iLen; i++) {

            int intTmp = arrB[i];

            // 把负数转换为正数

            while (intTmp < 0) {

                intTmp = intTmp + 256;

            }

            // 小于0F的数需要在前面补0

            if (intTmp < 16) {

                sb.append("0");

            }

            sb.append(Integer.toString(intTmp, 16));

        }

        return sb.toString();

    }

    /**
     * 
     * 将表示16进制值的字符串转换为byte数组, 和public static String byteArr2HexStr(byte[] arrB)
     * 互为可逆的转换过程
     * 
     * @param strIn
     * 
     *            需要转换的字符串
     * 
     * @return 转换后的byte数组
     * 
     * @throws Exception
     * 
     *             本方法不处理任何异常,所有异常全部抛出 @ <a
     *             href="mailto:leo841001@163.com">LiGuoQing</a>
     */

    public static byte[] hexStr2ByteArr(String strIn) throws Exception {

        byte[] arrB = strIn.getBytes();

        int iLen = arrB.length;

        // 两个字符表示一个字节,所以字节数组长度是字符串长度除以2

        byte[] arrOut = new byte[iLen / 2];

        for (int i = 0; i < iLen; i = i + 2) {

            String strTmp = new String(arrB, i, 2);

            arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);

        }

        return arrOut;

    }

    /**
     * 
     * 默认构造方法,使用默认密钥
     * 
     * @throws Exception
     */

    public DES() throws Exception {

        this(strDefaultKey);

    }

    /**
     * 
     * 指定密钥构造方法
     * 
     * @param strKey
     * 
     *            指定的密钥
     * 
     * @throws Exception
     */

    public DES(String strKey) throws Exception {

        // 如果没有指定秘钥的话,使用默认秘钥
        if (strKey == null || strKey.equals(""))
            strKey = strDefaultKey;

        Key key = getKey(strKey.getBytes());

        // NoPadding

        // PKCS5Padding

        encryptCipher = Cipher.getInstance("DES/ECB/NoPadding", "SunJCE");

        encryptCipher.init(Cipher.ENCRYPT_MODE, key);

        decryptCipher = Cipher.getInstance("DES/ECB/NoPadding", "SunJCE");

        decryptCipher.init(Cipher.DECRYPT_MODE, key);

    }

    /**
     * 
     * 加密字节数组
     * 
     * @param arrB
     *            需加密的字节数组
     * 
     * @return 加密后的字节数组
     * 
     * @throws Exception
     */

    public byte[] encrypt(byte[] arrB) throws Exception {

        return encryptCipher.doFinal(arrB);

    }

    /**
     * 
     * 加密字符串
     * 
     * 
     * 
     * @param strIn
     * 
     *            需加密的字符串
     * 
     * @return 加
     * 
     *         密后的字符串
     * 
     * @throws Exception
     */

    public String encrypt(String strIn, String encode) throws Exception {

        return byteArr2HexStr(encrypt(strIn.getBytes(encode)));

    }

    /**
     * 
     * 解密字节数组
     * 
     * @param arrB
     * 
     *            需解密的字节数组
     * 
     * @return 解密后的字节数组
     * 
     * @throws Exception
     */

    public byte[] decrypt(byte[] arrB) throws Exception {

        return decryptCipher.doFinal(arrB);

    }

    /**
     * 
     * 解密字符串
     * 
     * 
     * 
     * @param strIn
     * 
     *            需解密的字符串
     * 
     * @return 解密后的字符串
     * 
     * @throws Exception
     */

    public String decrypt(String strIn, String encode) throws Exception {

        return new String(decrypt(hexStr2ByteArr(strIn)), encode);

    }

    /**
     * 
     * 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位
     * 
     * 
     * 
     * @param arrBTmp
     * 
     *            构成该字符串的字节数组
     * 
     * @return 生成的密钥
     * 
     * @throws Exception
     */

    private Key getKey(byte[] arrBTmp) throws Exception {

        // 创建一个空的8位字节数组(默认值为0)

        byte[] arrB = new byte[8];

        // 将原始字节数组转换为8位

        for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {

            arrB[i] = arrBTmp[i];

        }

        // 生成密钥

        Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES");

        return key;

    }

    /**
     * 
     * DES加密
     * 
     * @param key
     *            使用的秘钥,传入null或是空值时使用默认秘钥
     * 
     * @param str
     *            待加密的明文
     * 
     * @param encode
     *            明文编码方式,一般为“GBK”
     * 
     * @return
     */

    public static String encrypt(String key, String str, String encode) {

        try {

            byte[] strBytes = str.getBytes(encode);

            byte[] newStrBytes = new byte[strBytes.length + (8 - strBytes.length % 8)];

            for (int i = 0; i < newStrBytes.length; i++) {

                newStrBytes[i] = i < strBytes.length ? strBytes[i] : 32;

            }// for

            return new DES(key).encrypt(new String(newStrBytes, encode), encode);

        } catch (Exception e) {

            // throw new MPayException(MPayException.MPAY_DES_ERROR,"加密失败",e);

            return "加密失败";

        }// try

    }

    /**
     * 
     * DES解密
     * 
     * @param key
     *            使用的秘钥,传入null或是空值时使用默认秘钥
     * 
     * @param str
     *            待解密的密文
     * 
     * @param encode
     *            密文编码方式,一般为“GBK”
     * 
     * @return
     */

    public static String decrypt(String key, String str, String encode) {

        try {

            return new DES(key).decrypt(str, encode).replaceAll("\\s*$", "");

        } catch (Exception e) {

            // throw new MPayException(MPayException.MPAY_DES_ERROR,"解密失败",e);

            return "解密失败";

        }// try

    }

    public static void main(String[] args) throws Exception {

        // String str = DesUtil.encrypt("}7$#3@+1~/B\\[D&...","intf", "UTF-8");

        // System.out.println("密文=" + str);

        // System.out.println("明文=#" +
        // DesUtil.decrypt("}7$#3@+1~/B\\[D&...",str, "UTF-8")+"#");

        // System.out.println(DesUtil.decrypt("}7$#3@+1~/B\\[D&...","54c5b564c51868ba",
        // "UTF-8"));//f54c505c18c74894 54c5b564c51868ba

        //

        // System.out.println( DesUtil.decrypt("}7$#3@+1", "d40d315388d74f2d",
        // "GBK") );

        String key = "";

        String message = "23873d4a0da6f58d3863b5758c457e312015ba63f4e433a4a12b60ca79bab8347e185d6502a594989d2711e8239ed0a37f14a477140fb18593d5dafba217ba76cf1e6a5fdf0f3593ff9945ac10398f99d5f14de2d349c4914431cb11724ee801f64147ea46455215777980a12f18acc842a8545db0bfe6d739efd36f096defa1bf2b1e016b4af9f18e87a3f220da2a4741f2cb88f6a29f8293e53357b2e6f9f9b4434f4e0b76ef6a250ecc47fecde2248e419665de46fe8fa31accc171bcbb44758d3ed4d2ab6e5d3456caee683dd1a8758d3ed4d2ab6e5d7cb111627e687fd3a9634596dd187b8acc697ee8444988d6908adf9322636cf7201f575fb41823ec412eede8a8c5a5b4d2eac2b6ae6bf07ef8ba56572383d327ce8e3f64aec57b4f473c0534c91140f160acf86fa415611c65d068960831f7864eff47fcb5a2a675c1ddb1b39ea3aa047a0b9f4258a61ae8e0b4664f71df1ea1ff9945ac10398f99da4be1a7f28b5f2a";

        System.out.println(DES.decrypt(key, message, "GBK"));

        String str = "123456.com";

        System.out.println(DES.encrypt(key, str, "GBK"));

    }
}

3个回答

Provider not available: SunJCE

可能是没有javax的包,或者android把javax的包里面的SunJCE的部分去掉了。

是不是java包使用的问题,找不到对应的支持方法来使用

android里面有些类是不能使用的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
javamail 接收邮件,总是报javax.mail.NoSuchProviderException: invalid provider
javamail接收邮件的时候,报错误 ``` public Store createStore() throws NoSuchProviderException { Properties properties = System.getProperties(); properties.setProperty("mail.store.protocol", "smtp"); properties.setProperty("mail.smtp.host", "smtp.qq.com"); //认证连接 properties.setProperty("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(properties,null); session.setDebug(false); //创建连接邮件服务器 smtp return session.getStore(protoco); } ``` ``然后启动运行报错` javax.mail.NoSuchProviderException: invalid provider at javax.mail.Session.getStore(Session.java:655) ~[javax.mail-1.6.2.jar:1.6.2] at javax.mail.Session.getStore(Session.java:621) ~[javax.mail-1.6.2.jar:1.6.2] at javax.mail.Session.getStore(Session.java:600) ~[javax.mail-1.6.2.jar:1.6.2] at com.geely.trip.messagecenter.utils.MailUtils.createStore(MailUtils.java:80) ~[classes/:?] at com.geely.trip.messagecenter.service.EmailService.queryEmail(EmailService.java:261) ~[classes/:?] at com.geely.trip.messagecenter.service.EmailService$$FastClassBySpringCGLIB$$f966b9a6.invoke(<generated>) ~[classes/:?] at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:684) ~[spring-aop-5.0.9.RELEASE.jar:5.0.9.RELEASE] at com.geely.trip.messagecenter.service.EmailService$$EnhancerBySpringCGLIB$$beacfde0.queryEmail(<generated>) ~[classes/:?] at com.geely.trip.messagecenter.controller.EmailController.queryEmail(EmailController.java:117) ~[classes/:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_181] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_181] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_181] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_181] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) ~[spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) ~[spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) ~[spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:891) ~[spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991) [spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925) [spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974) [spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866) [spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) [javax.servlet-api-3.1.0.jar:3.1.0] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851) [spring-webmvc-5.0.9.RELEASE.jar:5.0.9.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [javax.servlet-api-3.1.0.jar:3.1.0] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-embed-websocket-8.5.34.jar:8.5.34] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34] at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) [druid-1.1.9.jar:1.1.9] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90) [spring-boot-actuator-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.springframework.cloud.sleuth.instrument.web.ExceptionLoggingFilter.doFilter(ExceptionLoggingFilter.java:48) [spring-cloud-sleuth-core-2.0.1.RELEASE.jar:2.0.1.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34] at brave.servlet.TracingFilter.doFilter(TracingFilter.java:86) [brave-instrumentation-servlet-5.1.4.jar:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:155) [spring-boot-actuator-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:123) [spring-boot-actuator-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:108) [spring-boot-actuator-2.0.5.RELEASE.jar:2.0.5.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.9.RELEASE.jar:5.0.9.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498) [tomcat-embed-core-8.5.34.jar:8.5.34] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.34.jar:8.5.34] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_181] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_181] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.34.jar:8.5.34] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181] 2019-03-13 19:12:55 [ http-nio-9002-exec-3:21999 ] - [ WARN ] org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:140) Resolved [javax.mail.NoSuchProviderException: invalid provider] 2019-03-13 19:13:12,314 INFO [Thread-30] server.JettyServer$1 (JettyServer.java:56) - >>>>>>>>>>> xxl-rpc server join success, netcon=com.xxl.job.core.rpc.netcom.jetty.server.JettyServer, port=9992 2019-03-13 19:17:47,162 INFO [AsyncResolver-bootstrap-executor-0] aws.ConfigClusterResolver (ConfigClusterResolver.java:43) - Resolving eureka endpoints via configuration 2019-03-13 19:18:06 [ http-nio-9002-exec-4:333136 ] - [ INFO ] org.springframework.cloud.config.client.ConfigServicePropertySourceLocator.getRemoteEnvironment(ConfigServicePropertySourceLocator.java:205) Fetching config from server at : http://10.86.216.184:8083/ 2019-03-13 19:18:06 [ http-nio-9002-exec-4:333501 ] - [ INFO ] org.springframework.cloud.config.client.ConfigServicePropertySourceLocator.log(ConfigServicePropertySourceLocator.java:149) Located environment: name=messagecenterxzy-v06, profiles=[localhost], label=master, version=47f76ee9b39bcda0ea0907280f06820b80e127de, state=null 2019-03-13 19:22:47,167 INFO [AsyncResolver-bootstrap-executor-0] aws.ConfigClusterResolver (ConfigClusterResolver.java:43) - Resolving eureka endpoints via configuration 2019-03-13 19:23:26 [ http-nio-9002-exec-8:653135 ] - [ INFO ] org.springframework.cloud.config.client.ConfigServicePropertySourceLocator.getRemoteEnvironment(ConfigServicePropertySourceLocator.java:205) Fetching config from server at : http://10.86.216.184:8083/ 2019-03-13 19:23:26 [ http-nio-9002-exec-8:653453 ] - [ INFO ] org.springframework.cloud.config.client.ConfigServicePropertySourceLocator.log(ConfigServicePropertySourceLocator.java:149) Located environment: name=messagecenterxzy-v06, profiles=[localhost], label=master, version=47f76ee9b39bcda0ea0907280f06820b80e127de, state=null 2019-03-13 19:27:47,169 INFO [AsyncResolver-bootstrap-executor-0] aws.ConfigClusterResolver (ConfigClusterResolver.java:43) - Resolving eureka endpoints via configuration 2019-03-13 19:28:46 [ http-nio-9002-exec-5:973135 ] - [ INFO ] org.springframework.cloud.config.client.ConfigServicePropertySourceLocator.getRemoteEnvironment(ConfigServicePropertySourceLocator.java:205) Fetching config from server at : http://10.86.216.184:8083/ 2019-03-13 19:28:46 [ http-nio-9002-exec-5:973441 ] - [ INFO ] org.springframework.cloud.config.client.ConfigServicePropertySourceLocator.log(ConfigServicePropertySourceLocator.java:149) Located environment: name=messagecenterxzy-v06, profiles=[localhost], label=master, version=47f76ee9b39bcda0ea0907280f06820b80e127de, state=null ``` ``` ```
Android Tomcal SSL Https 单向篇
做到第三个步骤生成server_trust.keystore文件的时候出现一个错误,错误如 keytool 错误: java.security.NoSuchProviderException: no such provider: BC,参考博客原文地址http://blog.csdn.net/huangshaotian/article/details/6823890
创建SSLContext对象,并使用我们指定的信任管理器初始化 出错
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); 报错: java.security.NoSuchProviderException: no such provider: SunJSSE at sun.security.jca.GetInstance.getService(GetInstance.java:140) at sun.security.jca.GetInstance.getInstance(GetInstance.java:269) at javax.net.ssl.SSLContext.getInstance(SSLContext.java:5) 运行环境 tomcat6,jdk1.6
javamail发送邮件问题
java发送邮件,在网上能到找到很多代码,但是都是最后利用mian方法来测试,请问可以直接调用么? 我利用main方法测试成功了,可是直接在程序中调用的话,另外一个类里面调用send()方法,就报javax.mail.NoSuchProviderException: Unable to locate provider for protocol: smtp错误了。mail.java包等都导入成功了,请教这是什么问题啊
java中实现发送邮件 session.getTransport() 为什么是null?
代码内容: Properties prop = new Properties(); prop.setProperty("mail.host", "smtp.qq.com"); prop.setProperty("mail.transport.protocol", "smtp"); prop.setProperty("mail.smtp.auth", "true"); //使用JavaMail发送邮件的5个步骤 //1、创建session Session session = Session.getInstance(prop); //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态 session.setDebug(true); //2、通过session得到transport对象 Transport ts = session.getTransport();-----------》这一步报空指针 控制台报错信息: javax.mail.NoSuchProviderException: java.lang.NullPointerException at javax.mail.Session.getTransport(Session.java:298)
java关于pgp解密的问题,急。。。。
之前测试是使用 pgpe -r minzheng jm.txt -o jm1.txt -a 加密方式加密的,可以直接解密 ,但是去银行联调后发现银行使用的是pgpe –r AAA –s –u BBB FILE1 –o FILE2 方式加密的,然后就不能解密了。。。纠结。。。我是找了一段代码用代码解密的, 正常情况下不会进去下面这个判断 } else if (message instanceof PGPOnePassSignatureList) { throw new PGPException( "encrypted message contains a signed message - not literal data."); } 以下是代码 package com.hunger; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.security.NoSuchProviderException; import java.security.SecureRandom; import java.security.Security; import java.util.Iterator; import org.bouncycastle.bcpg.ArmoredOutputStream; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.openpgp.PGPCompressedData; import org.bouncycastle.openpgp.PGPCompressedDataGenerator; import org.bouncycastle.openpgp.PGPEncryptedData; import org.bouncycastle.openpgp.PGPEncryptedDataGenerator; import org.bouncycastle.openpgp.PGPEncryptedDataList; import org.bouncycastle.openpgp.PGPException; import org.bouncycastle.openpgp.PGPLiteralData; import org.bouncycastle.openpgp.PGPOnePassSignatureList; import org.bouncycastle.openpgp.PGPPrivateKey; import org.bouncycastle.openpgp.PGPPublicKey; import org.bouncycastle.openpgp.PGPPublicKeyEncryptedData; import org.bouncycastle.openpgp.PGPSecretKeyRingCollection; import org.bouncycastle.openpgp.PGPUtil; import org.bouncycastle.openpgp.jcajce.JcaPGPObjectFactory; import org.bouncycastle.openpgp.operator.jcajce.JcaKeyFingerprintCalculator; import org.bouncycastle.openpgp.operator.jcajce.JcePGPDataEncryptorBuilder; import org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyDataDecryptorFactoryBuilder; import org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyKeyEncryptionMethodGenerator; import org.bouncycastle.util.io.Streams; public class PgpOperation { public static void decryptFile(String inputFileName, String keyFileName, char[] passwd, String defaultFileName) throws IOException, NoSuchProviderException { Security.addProvider(new BouncyCastleProvider()); InputStream in = new BufferedInputStream(new FileInputStream( inputFileName)); InputStream keyIn = new BufferedInputStream(new FileInputStream( keyFileName)); decryptFile(in, keyIn, passwd, defaultFileName); keyIn.close(); in.close(); } /** * decrypt the passed in message stream */ private static void decryptFile(InputStream in, InputStream keyIn, char[] passwd, String defaultFileName) throws IOException, NoSuchProviderException { in = PGPUtil.getDecoderStream(in); try { JcaPGPObjectFactory pgpF = new JcaPGPObjectFactory(in); PGPEncryptedDataList enc; Object o = pgpF.nextObject(); // // the first object might be a PGP marker packet. // if (o instanceof PGPEncryptedDataList) { enc = (PGPEncryptedDataList) o; } else { enc = (PGPEncryptedDataList) pgpF.nextObject(); } // // find the secret key // @SuppressWarnings("rawtypes") Iterator it = enc.getEncryptedDataObjects(); PGPPrivateKey sKey = null; PGPPublicKeyEncryptedData pbe = null; PGPSecretKeyRingCollection pgpSec = new PGPSecretKeyRingCollection( PGPUtil.getDecoderStream(keyIn), new JcaKeyFingerprintCalculator()); while (sKey == null && it.hasNext()) { pbe = (PGPPublicKeyEncryptedData) it.next(); sKey = PGPExampleUtil.findSecretKey(pgpSec, pbe.getKeyID(), passwd); } if (sKey == null) { throw new IllegalArgumentException( "secret key for message not found."); } InputStream clear = pbe .getDataStream(new JcePublicKeyDataDecryptorFactoryBuilder() .setProvider("BC").build(sKey)); JcaPGPObjectFactory plainFact = new JcaPGPObjectFactory(clear); PGPCompressedData cData = (PGPCompressedData) plainFact .nextObject(); InputStream compressedStream = new BufferedInputStream( cData.getDataStream()); JcaPGPObjectFactory pgpFact = new JcaPGPObjectFactory( compressedStream); Object message = pgpFact.nextObject(); if (message instanceof PGPLiteralData) { PGPLiteralData ld = (PGPLiteralData) message; String outFileName = ld.getFileName(); // if (outFileName.length() == 0) // { outFileName = defaultFileName; // } InputStream unc = ld.getInputStream(); OutputStream fOut = new BufferedOutputStream( new FileOutputStream(outFileName)); Streams.pipeAll(unc, fOut); fOut.close(); } else if (message instanceof PGPOnePassSignatureList) { throw new PGPException( "encrypted message contains a signed message - not literal data."); } else { throw new PGPException( "message is not a simple encrypted file - type unknown."); } if (pbe.isIntegrityProtected()) { if (!pbe.verify()) { System.err.println("message failed integrity check"); } else { System.err.println("message integrity check passed"); } } else { System.err.println("no message integrity check"); } } catch (PGPException e) { System.err.println(e); if (e.getUnderlyingException() != null) { e.getUnderlyingException().printStackTrace(); } } } public static void encryptFile(String outputFileName, String inputFileName, String encKeyFileName, boolean armor, boolean withIntegrityCheck) throws IOException, NoSuchProviderException, PGPException { Security.addProvider(new BouncyCastleProvider()); OutputStream out = new BufferedOutputStream(new FileOutputStream( outputFileName)); PGPPublicKey encKey = PGPExampleUtil.readPublicKey(encKeyFileName); encryptFile(out, inputFileName, encKey, armor, withIntegrityCheck); out.close(); } private static void encryptFile(OutputStream out, String fileName, PGPPublicKey encKey, boolean armor, boolean withIntegrityCheck) throws IOException, NoSuchProviderException { if (armor) { out = new ArmoredOutputStream(out); } try { PGPEncryptedDataGenerator cPk = new PGPEncryptedDataGenerator( new JcePGPDataEncryptorBuilder(PGPEncryptedData.CAST5) .setWithIntegrityPacket(withIntegrityCheck) .setSecureRandom(new SecureRandom()) .setProvider("BC")); cPk.addMethod(new JcePublicKeyKeyEncryptionMethodGenerator(encKey) .setProvider("BC")); OutputStream cOut = cPk.open(out, new byte[1 << 16]); PGPCompressedDataGenerator comData = new PGPCompressedDataGenerator( PGPCompressedData.ZIP); PGPUtil.writeFileToLiteralData(comData.open(cOut), PGPLiteralData.BINARY, new File(fileName), new byte[1 << 16]); comData.close(); cOut.close(); if (armor) { out.close(); } } catch (PGPException e) { System.err.println(e); if (e.getUnderlyingException() != null) { e.getUnderlyingException().printStackTrace(); } } } public static void main(String[] args) throws Exception { Security.addProvider(new BouncyCastleProvider()); if (args.length == 0) { System.err .println("usage: KeyBasedLargeFileProcessor -e|-d [-a|ai] file [secretKeyFile passPhrase|pubKeyFile]"); return; } if (args[0].equals("-e")) { if (args[1].equals("-a") || args[1].equals("-ai") || args[1].equals("-ia")) { encryptFile(args[2] + ".asc", args[2], args[3], true, (args[1].indexOf('i') > 0)); } else if (args[1].equals("-i")) { encryptFile(args[2] + ".bpg", args[2], args[3], false, true); } else { encryptFile(args[1] + ".bpg", args[1], args[2], false, false); } } else if (args[0].equals("-d")) { decryptFile(args[1], args[2], args[3].toCharArray(), args[4]); } else { System.err .println("usage: KeyBasedLargeFileProcessor -d|-e [-a|ai] file [secretKeyFile passPhrase|pubKeyFile]"); } } }
javamail发送邮件报错,求指教。
前段时间写了一个简单的javamail发送邮件的功能,测试功能正常后就没管了。今天再次测试的时候,发现居然报错了。求大神指点指点。 package com.temp.test; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.NoSuchProviderException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; /** @author xuyl@scoretk.com @date 2014-2-11 上午06:53:10 */ public class MailUtil { static int port = 25; static String server = "smtp.163.com";//邮件服务器mail.cpip.net.cn static String from = "张三";//发送者,显示的发件人名字 static String user = "cqsiai@163.com";//发送者邮箱地址 static String password = "admin123";//密码 public static void sendEmail(String email, String subject, String body) throws UnsupportedEncodingException { try { Properties props = new Properties(); props.put("mail.smtp.host", server); props.put("mail.smtp.port", String.valueOf(port)); props.put("mail.smtp.auth", "true"); Transport transport = null; Session session = Session.getDefaultInstance(props, null); transport = session.getTransport("smtp"); transport.connect(server, user, password); MimeMessage msg = new MimeMessage(session); msg.setSentDate(new Date()); InternetAddress fromAddress = new InternetAddress(user,from,"UTF-8"); msg.setFrom(fromAddress); InternetAddress[] toAddress = new InternetAddress[1]; toAddress[0] = new InternetAddress(email); msg.setRecipients(Message.RecipientType.TO, toAddress); msg.setSubject(subject, "UTF-8"); msg.setText(body, "UTF-8"); msg.saveChanges(); transport.sendMessage(msg, msg.getAllRecipients()); } catch (NoSuchProviderException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } } public static void main(String args[]) throws UnsupportedEncodingException { sendEmail("378675113@qq.com","邮件测试","hello");//收件人 System.out.println("ok"); } } 报错内容: javax.mail.MessagingException: IOException while sending message; nested exception is: javax.activation.UnsupportedDataTypeException: no object DCH for MIME type text/plain; charset=UTF-8 at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1177) at com.temp.test.MailUtil.sendEmail(MailUtil.java:45) at com.temp.test.MailUtil.main(MailUtil.java:55) Caused by: javax.activation.UnsupportedDataTypeException: no object DCH for MIME type text/plain; charset=UTF-8 at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:841) at javax.activation.DataHandler.writeTo(DataHandler.java:295) at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1485) at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1773) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1121) ... 2 more ok
java代码0用163邮箱发送邮件时报这个错
com.sun.mail.smtp.SMTPSendFailedException: 553 authentication is required,163 smtp14,EsCowEBZ50rSm3JWmXF+AA--.3541S2 1450351570 java代码: public class EmailTools { public static boolean send(String to,String subject,String content){ Properties props = new Properties(); props.put("mail.transport.protocol", "smtp"); props.put("mail.host","smtp.163.com"); props.put("mail.from", "15234874536@163.com"); props.put("mail.smtp.anth", true); Session session = Session.getDefaultInstance(props); session.setDebug(true); try { Transport transport = session.getTransport(); // 连接邮件服务器,链接您的163、sina邮箱,用户名(不带@163.com,登录邮箱的邮箱账号,不是邮箱地址)、密码 transport.connect("15234874536","*************"); MimeMessage message = new MimeMessage(session); message.setSubject(subject); message.setContent(content,"text/html;charset=utf-8"); message.setSentDate(new Date()); transport.sendMessage(message, InternetAddress.parse(to)); return true; } catch (NoSuchProviderException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } public static void main(String[] args) { // TODO Auto-generated method stub EmailTools email = new EmailTools(); email.send("2747917518@qq.com","Hello World!", "你好你好你好你好你好"); } }
Java AES-256加密文件之后解密文件,文件被损坏
public static Cipher initAESCipher(String password, int cipherMode) { // 创建Key gen KeyGenerator keyGenerator = null; Cipher cipher = null; try { keyGenerator = KeyGenerator.getInstance("AES"); keyGenerator.init(256, new SecureRandom(password.getBytes())); SecretKey secretKey = keyGenerator.generateKey(); byte[] codeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(codeFormat, "AES"); cipher = Cipher.getInstance("AES/ECB/PKCS7Padding","BC"); // 初始化 cipher.init(cipherMode, key); return cipher; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); // To change body of catch statement use File | } catch (NoSuchPaddingException e) { e.printStackTrace(); // To change body of catch statement use File | } catch (InvalidKeyException e) { e.printStackTrace(); // To change body of catch statement use File | } catch (NoSuchProviderException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } ``` ``` public static void encrypt(File source, File target, String password) throws Exception { InputStream input = new FileInputStream(source); OutputStream ouput = new FileOutputStream(target); logger.debug("开始写入加密文件"); long start = System.currentTimeMillis(); CipherInputStream cipherInputStream = (CipherInputStream) encrypt(input, password); IOUtils.copy(cipherInputStream,ouput ); cipherInputStream.close(); input.close(); ouput.close(); logger.debug("完成文件加密,耗时:" + (System.currentTimeMillis() - start)); } ``` ``` public static InputStream encrypt(InputStream input, String password) { logger.debug("开始加密文件流"); long start = System.currentTimeMillis(); Cipher cipher = initAESCipher(password, Cipher.ENCRYPT_MODE); logger.debug("生成密钥耗时:" + (System.currentTimeMillis() - start)); Assert.notNull(cipher); // 以加密流写入文件 CipherInputStream cipherInputStream = new CipherInputStream(input, cipher); logger.debug("完成加密文件流,耗时:" + (System.currentTimeMillis() - start)); return cipherInputStream; } ``` ``` 目前发现加密DOCX,PPTX,ZIP等压缩类文件之后进行解密会产生头信息被损坏的现象,望各位大神提供下解决思路。
Java收邮件功能
在同事帮助下写了一个javaMail收邮件的功能 好像用不成 请哪位大哥赐教下~ 实在没办法了 只要收件功能就行了 [b]问题补充:[/b] 总是报这个异常javax.mail.NoSuchProviderException: Invalid protocol: null at javax.mail.Session.getProvider(Session.java:431) at javax.mail.Session.getStore(Session.java:530) 代码 package com.abank.util; import com.ReciveOneMail; import javax.mail.*; import javax.mail.internet.MimeMessage; import java.util.Properties; /** * Created by IntelliJ IDEA. * User: Administrator * Date: 2009-11-27 * Time: 16:17:13 * To change this template use File | Settings | File Templates. */ public class MainSender { // 接受邮件 // 接受邮件 public static String getMail() throws Exception{ String host = "pop3.163.com"; // 创建Properties 对象 Properties props = new Properties(); final String username = "shaersashajindan@163.com"; final String password = "327521526"; // 创建邮件会话 Session session = Session.getDefaultInstance(props,null); try { // 获取邮箱的pop3存储 URLName urln = new URLName("pop3"); Store store = session.getStore(urln); store.connect(host, username, password); // 获取inbox文件 Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); // 打开,打开后才能读取邮件信息 // 获取邮件消息 Message[] message = folder.getMessages(); FetchProfile profile = new FetchProfile(); profile.add(FetchProfile.Item.ENVELOPE); folder.fetch(message, profile); System.out.println("unread message count =:"+folder.getDeletedMessageCount()); System.out.println("message length =:"+message.length); System.out.println("Messages's length: " + message.length); ReciveOneMail pmm = null; for (int i = 0, n = message.length; i < n; i++) { System.out.println("============================================================"); pmm = new ReciveOneMail((MimeMessage) message[i]); System.out.println("Message " + i + " subject: " + pmm.getSubject()); System.out.println("Message " + i + " sentdate: " + pmm.getSentDate()); System.out.println("Message " + i + " replysign: " + pmm.getReplySign()); System.out.println("Message " + i + " hasRead: " + pmm.isNew()); System.out.println("Message " + i + " containAttachment: " + pmm.isContainAttach((Part) message[i])); System.out.println("Message " + i + " form: " + pmm.getFrom()); System.out.println("Message " + i + " to: " + pmm.getMailAddress("to")); System.out.println("Message " + i + " cc: " + pmm.getMailAddress("cc")); System.out.println("Message " + i + " bcc: " + pmm.getMailAddress("bcc")); pmm.setDateFormat("yy年MM月dd日 HH:mm"); System.out.println("Message " + i + " sentdate: " + pmm.getSentDate()); System.out.println("Message " + i + " Message-ID: " + pmm.getMessageId()); // 获得邮件内容=============== pmm.getMailContent((Part) message[i]); System.out.println("Message " + i + " bodycontent: \r\n" + pmm.getBodyText()); pmm.setAttachPath("c:\\mailfile"); pmm.saveAttachMent((Part) message[i]); message[i].setFlag(Flags.Flag.DELETED, true); if(message[i].isSet(Flags.Flag.DELETED)) System.out.println("邮件已删除"); } // 关闭资源 folder.close(true); store.close(); System.out.println("success"); } catch (MessagingException e) { e.printStackTrace(); } System.out.println("GetMail Process Over!"); return "ririri"; } }
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
阿里面试官问我:如何设计秒杀系统?我的回答让他比起大拇指
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n...
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
Android性能优化(4):UI渲染机制以及优化
文章目录1. 渲染机制分析1.1 渲染机制1.2 卡顿现象1.3 内存抖动2. 渲染优化方式2.1 过度绘制优化2.1.1 Show GPU overdraw2.1.2 Profile GPU Rendering2.2 卡顿优化2.2.1 SysTrace2.2.2 TraceView 在从Android 6.0源码的角度剖析View的绘制原理一文中,我们了解到View的绘制流程有三个步骤,即m...
微服务中的Kafka与Micronaut
今天,我们将通过Apache Kafka主题构建一些彼此异步通信的微服务。我们使用Micronaut框架,它为与Kafka集成提供专门的库。让我们简要介绍一下示例系统的体系结构。我们有四个微型服务:订单服务,行程服务,司机服务和乘客服务。这些应用程序的实现非常简单。它们都有内存存储,并连接到同一个Kafka实例。 我们系统的主要目标是为客户安排行程。订单服务应用程序还充当网关。它接收来自客户的请求...
致 Python 初学者们!
作者| 许向武 责编 | 屠敏 出品 | CSDN 博客 前言 在 Python 进阶的过程中,相信很多同学应该大致上学习了很多 Python 的基础知识,也正在努力成长。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 Python 这门编程语言,从2009年开始单一使用 Python 应对所有的开发工作,直至今...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
SpringBoot2.x系列教程(三十六)SpringBoot之Tomcat配置
Spring Boot默认内嵌的Tomcat为Servlet容器,关于Tomcat的所有属性都在ServerProperties配置类中。同时,也可以实现一些接口来自定义内嵌Servlet容器和内嵌Tomcat等的配置。 关于此配置,网络上有大量的资料,但都是基于SpringBoot1.5.x版本,并不适合当前最新版本。本文将带大家了解一下最新版本的使用。 ServerProperties的部分源...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
爬取薅羊毛网站百度云资源
这是疫情期间无聊做的爬虫, 去获取暂时用不上的教程 import threading import time import pandas as pd import requests import re from threading import Thread, Lock # import urllib.request as request # req=urllib.request.Requ...
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
HTML5适合的情人节礼物有纪念日期功能
前言 利用HTML5,css,js实现爱心树 以及 纪念日期的功能 网页有播放音乐功能 以及打字倾诉感情的画面,非常适合情人节送给女朋友 具体的HTML代码 具体只要修改代码里面的男某某和女某某 文字段也可自行修改,还有代码下半部分的JS代码需要修改一下起始日期 注意月份为0~11月 也就是月份需要减一。 当然只有一部分HTML和JS代码不够运行的,文章最下面还附加了完整代码的下载地址 &lt;!...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允许使用这...
python沙箱逃逸
沙箱逃逸是CTF和实际场景中经常遇到的一种情况。需要利用python的特性来实现逃逸。本文详细介绍了关于python逃逸的基础以及一些构造payload方法,并且附加习题提供练习。
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧???? 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升自...
新来个技术总监,禁止我们使用Lombok!
我有个学弟,在一家小型互联网公司做Java后端开发,最近他们公司新来了一个技术总监,这位技术总监对技术细节很看重,一来公司之后就推出了很多"政策",比如定义了很多开发规范、日志规范、甚至是要求大家统一使用某一款IDE。 但是这些都不是我这个学弟和我吐槽的点,他真正和我吐槽的是,他很不能理解,这位新来的技术总监竟然禁止公司内部所有开发使用Lombok。但是又没给出十分明确的,可以让人信服的理由。 于...
教你如何编写第一个简单的爬虫
很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。 下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。 第一步:获取页面 #!/usr/bin/python # coding: utf-8 import requests #引入包requests link = "http://www.santostang....
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
情人节到了,适合程序员表白的情话【保你脱单】
谁说我们程序员不浪漫,这些情话只有程序员能看懂
MySQL explain命令详解
使用explain + sql语句可以得到该条sql语句的执行计划,具体信息如下 下面将依次介绍每个字段的含义 id id表示在多表查询时,表的执行顺序,它是一组数字序列号,表示查询中执行select子句或操作表的顺序,其取值分为以下三种情况 1.id相同,表示表的执行顺序由上至下 上例中,表示该sql语句执行时对三张表的查询顺序是先查询t1,再查询t3,最后查询t3 2....
利用python进行新型肺炎历史数据下载,时间从1月24日开始至今,分省将数据下载到本地,保存为csv
鉴于之前,实时获取丁香医生上的肺炎数据的工作,可以参照我的博客:肺炎数据下载,大家对于历史数据获取比较关心,的确如此,好在有网友先见之明,在数据公布开始,就进行了历史数据的爬取与存储,从而对历史数据的下载成为可能,这里特别感谢知乎用户:李二蛋。 工具下载地址: 链接:https://pan.baidu.com/s/1UN6NES4Y92zbqUMKtPT4ew 提取码:o2c8 爬取的效果如...
相关热词 c# 时间比天数 c# oracle查询 c# 主动推送 事件 c# java 属性 c# 控制台 窗体 c# 静态类存值 c#矢量作图 c#窗体调用外部程式 c# enum是否合法 c# 如何卸载引用
立即提问