java
子非鱼焉
数学物理天文科幻爱好者,看家手艺是Java http://debug4.me
展开
-
Java系统时钟几个值得思考的问题
System.currentTimeMillis()是依赖于系统时钟的,也就是说,如果你把自己的系统时钟更改了,这个函数的返回会立即生效,变成更改后的值;System.nanoTime()主要用于记录一个时间段的长度,或者说一个超时,在这个过程中,你更改系统时钟也不会影响。两个方法的精度一个是毫秒,一个是纳秒,但都是不靠普的(有些系统的时间粒度是10ms),nanoTime()的调用也会消原创 2013-07-01 17:14:39 · 704 阅读 · 0 评论 -
给HttpClient添加Socks代理
本文描述http client使用socks代理过程中需要注意的几个方面:1,socks5支持用户密码授权;2,支持https;3,支持让代理服务器解析DNS;使用代理创建Socket从原理上来看,不管用什么http客户端(httpclient,okhttp),最终都要转换到java.net.Socket的创建上去,看到代码:package java.net; public原创 2018-02-07 14:32:28 · 2982 阅读 · 1 评论 -
[置顶] java编程方式生成CA证书
下面是java编程方式生成CA证书的代码,使用的是BC的provider。生成CA证书与生成普通证书的区别是:1,生成CA证书时,issuer和subject一致;2,在ContentSigner.build()的时候(签名的时候)使用的是与待签名公钥相应的私钥。下面代码,CA生成以后把私钥和证书一起以一个key entry的方式存入一个jks文件。 static { Sec原创 2013-07-01 17:14:54 · 992 阅读 · 0 评论 -
为什么InputStream.read()读取一个byte确返回一个int呢?
问题1:为什么InputStream.read()读取一个byte却返回一个int呢?InputStream.read()返回一个unsigned byte [0 - 255],而java里面没有这个类型,所以用int接收。byte的范围是[-128,127],所以如果read()返回的数在[128,255]的范围内时,则表示负数,即 (byte)128=-128 (byt原创 2013-07-01 17:14:41 · 882 阅读 · 0 评论 -
泛型类里面获取到泛型的类型
下面的代码可以让你在抽象的泛型类里面获取到泛型的类型abstract class A { Class clazz; void doGetClass() { Type genType = this.getClass().getGenericSuperclass(); Type[] params = ((ParameterizedType)原创 2013-07-01 17:14:16 · 851 阅读 · 0 评论 -
用Java模拟Http请求
1),利用httpclient4.× 写一个http的客户端,模拟浏览器请求,public void post(List payload) throws Exception{ HttpPost post = new HttpPost(uri); HttpEntity result = null; try {原创 2013-07-01 17:13:54 · 464 阅读 · 0 评论 -
[置顶] java-在非安全网络上建立可信任安全的通道(2/3)
在不安全的网络环境下进行密钥交互(1/3,前面那一节),容易遭受中间人攻击,什么是中间人攻击,请google it。 通信的双方必须是相互信任的,在这个基础上再进行密钥协商才是可靠的。那么,如何建立信任关系呢? 我以前的几篇博文介绍了用如何 用 Java编程方式生成CA证书 以及用CA证书签发客户证书。 现在假设,Alice和Bob的证书都是被同一个CA atlas签发的原创 2013-07-01 17:15:00 · 534 阅读 · 0 评论 -
logback的SizeBasedTriggeringPolicy和TimeBasedRollingPolicy联合使用问题
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> /var/log/testglog /var/log/test.%d{yyyy-MM-dd}.log 30 10MB %-15d{y原创 2013-07-01 17:14:35 · 5859 阅读 · 1 评论 -
java-在非安全网络上建立可信任安全的通道(3/3)
这篇博文的前两节(1/3,2/3)已经介绍了如何在不安全网络环境下面相互认证双方的身份(建立信任的连接),以及在此基础上进行可靠的密钥协商(DH算法)。 这一节将介绍如何使用协商好的密钥对通道上流淌的数据进行加密。我将使用AES作为对称密钥的算法,密钥强度:128位。这个过程可以简单概括成下面两个步骤: 利用协商好的key创建一个可以用于加密和解密的Aes Cipher;原创 2013-07-01 17:14:22 · 472 阅读 · 0 评论 -
Spring2.5.6 的一段源码疑似bug
在AbstractJdbcInsert类中的方法: private void setParameterValues(PreparedStatement preparedStatement, List values, int[] columnTypes) throws SQLException { int colIndex = 0; for (Object value : v原创 2013-07-01 17:13:09 · 708 阅读 · 0 评论 -
[置顶] 回忆去年用Java破解unity.exe的过程
去年我一同学要我破解unity.exe,然后挂在网上卖点钱花。后来我对破解过程涉及的技术问题痴迷了,再后来... unity.exe是一个windows下的二进制程序,有一个用xml签名的license文件,license文件分几个部分:1,一个CA认证机构的证书(好像是PACE Anti-Piracy):certCA;2,unity机构的证书:certU;3,使用certU签原创 2013-07-01 17:15:02 · 805 阅读 · 0 评论 -
JGroups TCP 发现机制解读
jgroups创建一个channel需要创建一个协议栈,协议栈的底层是传输协议,如果使用TCP的话,它的发现机制和心跳是怎么实现的呢? 首先,TCP启动的时候会启动一个SocketServer bind到一个特定的地址然后accept:ConnectionAcceptor。jgroups会给每个TCP socketServer创建一个ConnectionMapTCPConnection>,原创 2013-07-01 17:14:43 · 1081 阅读 · 0 评论 -
车羊问题的一种简洁证明
在csdn上看到一篇关于车羊问题的文章(http://blog.csdn.net/naturebe/article/details/7272232),我编了个程序证明了结论,然后给出了一种简洁的数学证明。如下: 车羊问题(Car and Goats problem)又叫蒙提霍尔问题(Monty Hall Problem)或三门问题。这个问题来源于美国电视娱乐节目Let’s Make a D原创 2013-07-01 17:14:13 · 844 阅读 · 0 评论 -
[置顶] 安全领域的一些概念
对称密钥/非对称密钥/key/ciphersymmetric cipher对称密钥:使用相同的密钥进行加密和解密,速度很快Asymmetric Cipher:非对称密钥:使用公钥加密,私钥解密,速度很慢 key和cipher的区别:可以把cipher看成一台机器,它需要插入一个key才可以工作,可以从一端A插入明文,另一端B输出密文,或者从B插入密文,从A输出明文。 实际原创 2013-07-01 17:14:52 · 452 阅读 · 0 评论 -
netty做Pipe一端快一端慢时防止内存溢出进行的操作
前段时间用netty3.x做了一个pipe的功能,读的速度很快,写的速度很慢,结果读总是把内存耗光(来不及写写到pipe的另一端),后面解决了这个问题。原来的pipe的代码: public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { inboundChan原创 2013-07-01 17:14:45 · 1702 阅读 · 0 评论 -
给OkHttp Client添加socks代理
Okhttp的使用没有httpClient广泛,网上关于Okhttp设置代理的方法很少,这篇文章完整介绍了需要注意的方方面面。上一篇博客中介绍了socks代理的入口是创建java.net.Socket时传入一个java.net.Porxy对象。 OkHttp client通过OkHttpClient.Builder创建,可以通过定制javax.net.ssl.SSLSocketFactory和原创 2018-02-07 14:40:13 · 4897 阅读 · 0 评论