- 浏览: 179777 次
- 性别:
- 来自: 深圳
最新评论
-
panhl:
我也实现了一个https://github.com/panho ...
具有相同属性任务串行有序执行的线程池设计 -
fengwei5129:
感谢,最近在看netty源码一直搞不清楚是如何实现的死锁检测, ...
Future机制用于并发编程时的死锁检测 -
OpenMind:
发现IBM JDK的System.nanoTime()没有实现 ...
Java系统时钟几个值得思考的问题 -
lvhongfen:
好了,感谢LZ分享
windows下plsql 设置 里面timestamp显示的格式 -
OpenMind:
今天发现,在linux下还有个很简介的方法查看线程的转储信息, ...
不依赖jstack的java 线程dump和死锁检查工具
文章列表
这篇博文的前两节(1/3,2/3)已经介绍了如何在不安全网络环境下面相互认证双方的身份(建立信任的连接),以及在此基础上进行可靠的密钥协商(DH算法)。
这一节将介绍如何使用协商好的密钥对通道上流淌的数据进行加密。我将使用AES作为对称密钥的算法,密钥强度:128位。这个过程可以简单概括成下面两个步骤:
利用协商好的key创建一个可以用于加密和解密的Aes Cipher;
使用这个cipher对一个byte数组进行加密和解密。
直接上代码吧:
/**
* 使用AES 128bit 算法进行加密和解密的工具类
*
* @author ...
在不安全的网络环境下进行密钥交互(1/3,前面那一节),容易遭受中间人攻击,什么是中间人攻击,请google it。
通信的双方必须是相互信任的,在这个基础上再进行密钥协商才是可靠的。那么,如何建立信任关系呢?
我以前的几篇博文介绍了用如何 用 Java编程方式生成CA证书 以及用CA证书签发客户证书。
现在假设,Alice和Bob的证书都是被同一个CA atlas签发的(见我前面的博文),那么他们之间如何安全的交互密钥呢?
Alice:
发送自己的证书Certa;
发送DH 密钥对的公钥PDa;
发送用自己的私钥 对DH公钥的签名Sa。
Bo ...
看到标题,几乎所有人都会想到SSL,但SSL比较重量级,我想做的是只利用java的JCE体系(不是JSSE)在非安全网络环境下建立起一个可信任的、安全的通道。
所以这篇博文包括两个主题:可信任和安全。
这一节只考虑如何交互密钥。下一节(2/3)讨论如何建立信任关系,并在可信关系上交换密钥(防止中间人攻击)。
非对称密钥不适合做通道加密,通道加密必然使用对称密钥。既然如此,通信的双方(或多方)如何获取一个共同的密钥呢?
DH算法(Diffie-Hellman)是一种密钥协商算法,不理解原理的可以看这里:http://zh.wikip ...
这些代码首先加载CA证书,然后分别用CA给Alice和Bob签发一个证书并保存到resource/目录下面,用jks格式存储。
CA证书也是用java编程方式制作的,制作过程请看我的上一篇博客。
public static void main(String[] args) throws KeyStoreException,
NoSuchAlgorithmException, CertificateException,
FileNotFoundException, IOException, UnrecoverableEntryException {
//读取CA证书 ...
下面是java编程方式生成CA证书的代码,使用的是BC的provider。生成CA证书与生成普通证书的区别是:1,生成CA证书时,issuer和subject一致;2,在ContentSigner.build()的时候(签名的时候)使用的是与待签名公钥相应的私钥。
下面代码,CA生成以后把私钥和证书一起以一个key entry的方式存入一个jks文件。
static {
Security.addProvider(new BouncyCastleProvider());
}
public static void main(String[] args) {
try ...
对称密钥/非对称密钥/key/cipher
symmetric cipher对称密钥:使用相同的密钥进行加密和解密,速度很快
Asymmetric Cipher:非对称密钥:使用公钥加密,私钥解密,速度很慢 key和cipher的区别:可以把cipher看成一台机器,它需要插入一个key才可以工作,可以从一端A插入明文,另一端B输出密文,或者从B插入密文,从A输出明文。 实际上cipher是一个数学函数,key就是自变量,密文是因变量。
数据的完整性
M上传了一个文件及文件的digest,别人下载后可以计算文件生成的digest进行比较看是否被修改。ok了吗?非也,S ...
1,cp 一个windows上的所有中文字体到linux机器:
copy C:\WINDOWS\Fonts\所有中文字体文件 =>/usr/share/fonts/
2,删除下面的字体:(最好先备份)
sudo rm /etc/fonts/conf.d/49-sansserif.conf
应该很少有人在opensuse上面开发java吧,如果有的话,几乎都会遇到一个很蛋疼等问题,就是eclipse没法工作,点一个什么菜单就崩溃了。
你可以通过更改参数MALLOC_CHECK_为0解决:
export MALLOC_CHECK_=0
或者这样启动eclipse: MALLOC_CHECK_=0 ./eclipse
MALLOC_CHECK_有四种设定,即:
MALLOC_CHECK_=0 ----- 关闭所有检查,不会中断
MALLOC_CHECK_=1 ----- 当有错误被探测到时,在标准错误输出(stderr)上打印错误信息, ...
下面的代码可以让你在抽象的泛型类里面获取到泛型的类型
abstract class A<T> {
Class<T> clazz;
void doGetClass() {
Type genType = this.getClass().getGenericSuperclass();
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
this.clazz = (Class<T>) params[0 ...
在csdn上看到一篇关于车羊问题的文章(http://blog.csdn.net/naturebe/article/details/7272232),我编了个程序证明了结论,然后给出了一种简洁的数学证明。如下:
车羊问题(Car and Goats problem)又叫蒙提霍尔问题(Monty Hall Problem)或三门问题。这个问题来源于美国电视娱乐节目Let’s Make a Deal,问题的名字则来自该节目的主持人蒙提·霍尔(Monty Hall)。问题是这样的:参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门就可以赢得该汽车,而另外两扇门后面则各藏 ...
http://hi.baidu.com/fwmf/blog/item/849c1cf7ece36c3a730eecee.html
ubuntu 11.04:
cd to a dir:
1,vim HelloWorld.java:
public class HelloWorld {
private native void print();
public static void main(String[] args) {
new HelloWorld().print();
}
...
linux下解压命令大全
.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
———————————————
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
———————————————
.bz2
解压1:bzip2 -d FileName.bz ...
使用hashcode
static final ConcurrentMap<Integer, Object> allObjects = new ConcurrentHashMap<Integer, Object>();
private static Integer allocateId(Object obj) {
Integer id = Integer.valueOf(System.identityHashCode(obj));
for (;;) {
// Loop until a uni ...
1.首先用jdk自带的工具keytool生成一个"服务器证书"
a.命令行进入$JAVA_HOME/bin目录($JAVA_HOME为jdk的安装目录)
b.输入:keytool -genkey -alias tomcat -keyalg RSA -keystore C:\tomcat.key
c.提示输入密码,使用Tomcat的默认值changeit
d.输入相关信息后确认(中国国码:86)
e.生成PCKS1.2格式的数字证书将保存在C:\tomcat.key
2.修改tomcat目录下的server.xml文件,增加
<Connector protocol=& ...
适应场景:
1,输入的数据限制在相对较小的范围内;2,数据没有重复;3,对于每条记录而言,除了单一整数外,没有任何其他相关联的数据。
2,要求
输入:一个最多包含n个正整数的文件F1,每个数小于n(n=1000000),而且整数没有重复;
输出:包含按升序排列的整数列表的文件F2;
约束:不超过1M的内存空间,运行时间10秒以内。
3,实现概要
可以用一个20位长度的0,1字符串来表示所有元素小于20的非负整数的集合。比如可以用下面的字符串来标示集合{1,2,3,5,8,13}:
S={0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 }
即S[1],S[2], ...