java 爬取ssl加密页面_java使用SSL加密来实现安全传输

java使用SSL加密来实现安全传输。

SSL(Secure Socket Layer),安全套接字层,位于HTTP层和TCP层之间,用来建立用户与服务器之间的加密通信,确保所传递信息的安全性。SSL是工作在公共密钥和私人密钥基础上的,任何用户都可以获得公共密钥来加密数据,但解密数据必须要通过相应的私人密钥。

使用SSL安全机制时,首先客户端与服务器建立连接,服务器把它的数字证书与公共密钥一并发送给客户端,客户端随机生成会话密钥,用从服务器得到的公共密钥对会话密钥进行加密,并把会话密钥在网络上传递给服务器,而会话密钥只有在服务器端用私人密钥才能解密,这样,客户端和服务器端就建立了一个惟一的安全通道。加密解密通常用RSA算法来实现分3步完成:第一步:生成密钥对;第二步:公钥加密;第三步:私钥解密。为简单起见,这里只列出密钥对的生成过程,源代码如下:

//生成密钥对的JAVA源代码

public int generateKeyPair(int length){

BigIntegerp, q, n, d, e, pSub1, qSub1, phi;

BigIntegerdP, dQ, qInv;

int pbitlength = (length + 1) / 2;

int qbitlength = (length- pbitlength);

e=new BigInteger(“65537″,10);

//生成素数p,并且使p-1与e互素

for (;;){

p = new BigInteger(pbitlength, 50,new SecureRandom());

if (e.gcd(p.subtract(ONE)).equals(ONE)) break;

}

for (;;){

//生成素数q,并且使q-1与e互素,与p不相等

for (;;)

{

q = new BigInteger(qbitlength,50,new SecureRandom());

if (e.gcd(q.subtract(ONE)).equals(ONE) && !p.equals(q)) break;

}

//模数n=p*q

n = p.multiply(q);

if (n.bitLength() == length) break;

p = p.max(q);

}

pSub1 = p.subtract(ONE);

qSub1 = q.subtract(ONE);

phi = pSub1.multiply(qSub1);

d = e.modInverse(phi);

dP = d.remainder(pSub1);

dQ = d.remainder(qSub1);

qInv = q.modInverse(p);

pukParam=new RSAPublicKey(n, e);

pvkParam=new RSAPrivateKey(n, e, d, p, q, dP, dQ, qInv);

return 1;

}

以上生成密钥对的代码中,生成p、q、e、d、n 等数是核心。其算法为:先找出3个数p,q,e,其中p,q是两个相异的质数,e是与(p-1)(q-1)互质的数,p,q,e这3个数便是Private Key;然后找出m,使得e m==1mod(p-1)(q-1),再计算n=p q,则m,n这两个数便是Public key。运行时,需在地址栏前面输入“https://”,而不是通常命名用的“http://”,这表明使用了SSL协议。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值