一.何为安全传输?

安全传输就是,即使人家从网络监听到我们发送的数据包,也无法破译我们的信息,或者破译的机会十分渺茫。
那么这是如何实现的呢? 毕竟,我们想要传输加密信息,接收者解密的话则需要密钥,而密钥也是需要通过网络传输的啊!!

1.非对称加密

密钥的安全传输需要用到一种特殊的加密技术: 非对称加密。

1.1 何为非对称加密?

一次非对称加密信息传输包含三个要素: 公钥,私钥,传输报文

  • 公钥: 源服务器生成,通过网络传输到目标服务器
  • 私钥: 源服务器生成,绝对保存在本地,不经过任何传输到任何地方,只存在源服务器本地。
  • 传输报文: 通过公钥或私钥进行加解密
    非对称加密运行流程如下:
    首先,源服务器生成一对密钥: 公钥,私钥。 公钥通过网络明文发送给目标服务器,然后源服务器将要发送的报文用私钥加密后发送给目标服务器,目标服务器拿到密文用公钥解密(这个过程不安全,因为如果其他人监听到公钥了,那么他就可以用公钥对源服务器发出的报文进行解密) ,接着目标服务器用公钥对要发送的报文进行加密,发送到源服务器,源服务器用私钥进行解密即可(这个过程是安全的,因为私钥只有源服务器拥有)

1.2 非对称加密算法RSA实例

典型的非对称加密算法RSA应用实例:

package RSA;import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.Charset;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Arrays;
import java.util.Base64;public class RSADemo {private static final String ENCODE = "UTF-8";private static final String AES = "AES";private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";/*** AES加密* @param content 加密内容* @param AES_IV 加密偏移量* @param AES_KEY 加密密钥* @return 密文* @throws Exception 加密过程中出现的异常*/public static String AESEncryptEncode(String content,String AES_IV,String AES_KEY) throws Exception{Base64.Decoder decoder = Base64.getDecoder();byte[] keyByte = decoder.decode(AES_KEY);int base = 16;if (keyByte.length % base != 0) {int groups = keyByte.length / base + 1;byte[] temp = new byte[groups * base];Arrays.fill(temp, (byte) 0);System.arraycopy(keyByte, 0, temp, 0, keyByte.length);keyByte = temp;}SecretKeySpec secretKeySpec = new SecretKeySpec(keyByte,AES);Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE,secretKeySpec,new IvParameterSpec(decoder.decode(AES_IV)));byte[] result = cipher.doFinal(content.getBytes(ENCODE));return Base64.getEncoder().encodeToString(result);}/*** AES解密* @param content 密文* @param AES_IV 解密偏移量* @param AES_KEY 解密密钥* @return 解密后明文* @throws Exception 异常*/public static String AESDecodeDecrypt(String content,String AES_IV,String AES_KEY) throws Exception{Base64.Decoder decoder = Base64.getDecoder();byte[] keyByte = decoder.decode(AES_KEY);int base = 16;if (keyByte.length % base != 0) {int groups = keyByte.length / base + 1;byte[] temp = new byte[groups * base];Arrays.fill(temp, (byte) 0);System.arraycopy(keyByte, 0, temp, 0, keyByte.length);keyByte = temp;}SecretKeySpec secretKeySpec = new SecretKeySpec(keyByte,AES);Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);cipher.init(Cipher.DECRYPT_MODE,secretKeySpec,new IvParameterSpec(decoder.decode(AES_IV)));byte[] base64 = decoder.decode(content);byte[] result = cipher.doFinal(base64);return new String(result, Charset.forName(ENCODE));}/*** Rsa生成公钥,密钥* @return 返回公钥,密钥字符串数组 0--密钥 1--公钥* @throws NoSuchAlgorithmException 异常信息*/public static String[] RsaGenera() throws NoSuchAlgorithmException {// 1.初始化发送方密钥KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");keyPairGenerator.initialize(512);KeyPair keyPair = keyPairGenerator.generateKeyPair();RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();String[] results = new String[2];results[0] = Base64.getEncoder().encodeToString(rsaPrivateKey.getEncoded());results[1] = Base64.getEncoder().encodeToString(rsaPublicKey.getEncoded());return results;}/*** Rsa私钥加密* @param privateKey 私钥* @param content 明文* @return 返回密文* @throws Exception 异常*/public static String RsaPrivateEncrypt(String privateKey,String content) throws Exception {PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey));KeyFactory keyFactory = KeyFactory.getInstance("RSA");PrivateKey privateKey1 = keyFactory.generatePrivate(pkcs8EncodedKeySpec);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, privateKey1);byte[] result = cipher.doFinal(content.getBytes(ENCODE));//System.out.println("私钥加密、公钥解密 ---- 加密:" + Arrays.toString(result));return Base64.getEncoder().encodeToString(result);}/*** Rsa公钥解密* @param publicKey 公钥* @param content 密文* @return 明文* @throws Exception 异常*/public static String RsaPublicUnEncrypt(String publicKey,String content) throws Exception{X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey));KeyFactory keyFactory = KeyFactory.getInstance("RSA");PublicKey publicKey1 = keyFactory.generatePublic(x509EncodedKeySpec);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, publicKey1);byte[] result = cipher.doFinal(Base64.getDecoder().decode(content));//System.out.println("私钥加密、公钥解密 ---- 解密:" + Base64.getEncoder().encodeToString(result));return Base64.getEncoder().encodeToString(result);}/*** Rsa公钥加密* @param publicKey 公钥* @param content 明文* @return 密文* @throws Exception 异常*/public static String RsaPublicEncrypt(String publicKey,String content) throws Exception{X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey));KeyFactory keyFactory = KeyFactory.getInstance("RSA");PublicKey publicKey1 = keyFactory.generatePublic(x509EncodedKeySpec2);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, publicKey1);byte[] result = cipher.doFinal(content.getBytes(ENCODE));//System.out.println("公钥加密、私钥解密 ---- 加密: "+Base64.getEncoder().encodeToString(result2));return Base64.getEncoder().encodeToString(result);}/*** Rsa私钥解密* @param privateKey 私钥* @param content 密文* @return 解密后明文* @throws Exception 异常*/public static String RsaPrivateUnEncrypt(String privateKey,String content) throws Exception{PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey));KeyFactory keyFactory = KeyFactory.getInstance("RSA");PrivateKey privateKey1 = keyFactory.generatePrivate(pkcs8EncodedKeySpec5);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, privateKey1);byte[] result = cipher.doFinal(Base64.getDecoder().decode(content));//System.out.println("公钥加密、私钥解密 ---- 解密:" + new String(result));return new String(result);}public static void main(String[] args) throws Exception {String[] keys = RsaGenera();System.out.println("RSA生成密钥对:");System.out.println("公钥:"+keys[1]);System.out.println("私钥:"+keys[0]);String test = RsaPublicEncrypt(keys[1],"今天打老虎");System.out.println("公钥加密:今天打老虎-->"+test);String test2 = RsaPrivateUnEncrypt(keys[0],test);System.out.println("私钥解密:"+test+"-->"+test2);}}

运行结果:

2.对称加密

对称加密技术是一种很广泛的加密技术。

2.1 何为对称加密

对称加密的元素主要有两个: 密钥,报文

  • 密钥: 通信双方提前约定好的密钥
  • 报文: 用相同的密钥进行加密和解密的报文

对称加密的运行流程如下:
首先通信双方约定好密钥,然后源服务器发送到目标服务器的密文用密钥加密,目标服务器用密钥解密密文即可。(如果密钥还是通过网络传输,则这种通信还是不安全的,除非双方线下约定且保证没有第三个人知道)

2.2 对称加密AES/CBC加密实例

package RSA;import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Base64;public class AESDemo {private static final String ENCODE = "UTF-8";private static final String AES = "AES";private static final String AES_IV = "49U2GlzcrBmS9UVz+mEE3Q==";private static final String AES_KEY = "D8M1+eb6mzq0Oc23K+YQYQ==";private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";/*** AES加密* @param content 加密内容* @param AES_IV 加密偏移量* @param AES_KEY 加密密钥* @return 密文* @throws Exception 加密过程中出现的异常*/public static String AESEncryptEncode(String content,String AES_IV,String AES_KEY) throws Exception{Base64.Decoder decoder = Base64.getDecoder();byte[] keyByte = decoder.decode(AES_KEY);int base = 16;if (keyByte.length % base != 0) {int groups = keyByte.length / base + 1;byte[] temp = new byte[groups * base];Arrays.fill(temp, (byte) 0);System.arraycopy(keyByte, 0, temp, 0, keyByte.length);keyByte = temp;}SecretKeySpec secretKeySpec = new SecretKeySpec(keyByte,AES);Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE,secretKeySpec,new IvParameterSpec(decoder.decode(AES_IV)));byte[] result = cipher.doFinal(content.getBytes(ENCODE));return Base64.getEncoder().encodeToString(result);}/*** AES解密* @param content 密文* @param AES_IV 解密偏移量* @param AES_KEY 解密密钥* @return 解密后明文* @throws Exception 异常*/public static String AESDecodeDecrypt(String content,String AES_IV,String AES_KEY) throws Exception{Base64.Decoder decoder = Base64.getDecoder();byte[] keyByte = decoder.decode(AES_KEY);int base = 16;if (keyByte.length % base != 0) {int groups = keyByte.length / base + 1;byte[] temp = new byte[groups * base];Arrays.fill(temp, (byte) 0);System.arraycopy(keyByte, 0, temp, 0, keyByte.length);keyByte = temp;}SecretKeySpec secretKeySpec = new SecretKeySpec(keyByte,AES);Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);cipher.init(Cipher.DECRYPT_MODE,secretKeySpec,new IvParameterSpec(decoder.decode(AES_IV)));byte[] base64 = decoder.decode(content);byte[] result = cipher.doFinal(base64);return new String(result, Charset.forName(ENCODE));}public static void main(String[] args) throws Exception {String m = AESEncryptEncode("今天打老虎",AES_IV,AES_KEY);System.out.println("AES对称加密: "+m);System.out.println("AES对称解密:"+AESDecodeDecrypt(m,AES_IV,AES_KEY));}}

运行结果:

3. 通过非对称+对称加密实现网络安全传输

通过前面的学习我们知道,安全传输的关键在于密钥不能被泄露,我们可以试想一下,我们能不能先用非对称加密传输密钥,然后用对称加密进行报文传输,这样的话不久实现了,加密传输。

流程如下:
首先源服务器生成私钥,公钥,将公钥发送给目标服务器,然后目标服务器用公钥加密对称密钥发送给源服务器,接着源服务器将密文解密得到对称密钥,这样就只有双方知道对称密钥了,不存在第三方知道了。
然后以后的信息传输就用对称密钥加解密即可。

3.1 结合RSA和AES/CBC实现安全传输Demo

非对称加密进行对称密钥传输,对称加密实现报文安全传输。

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Arrays;
import java.util.Base64;public class EncryptUtil {private static final String ENCODE = "UTF-8";private static final String AES = "AES";private static final String AES_IV = "49U2GlzcrBmS9UVz+mEE3Q==";private static final String AES_KEY = "D8M1+eb6mzq0Oc23K+YQYQ==";private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";/*** AES加密* @param content 加密内容* @param AES_IV 加密偏移量* @param AES_KEY 加密密钥* @return 密文* @throws Exception 加密过程中出现的异常*/public static String AESEncryptEncode(String content,String AES_IV,String AES_KEY) throws Exception{Base64.Decoder decoder = Base64.getDecoder();byte[] keyByte = decoder.decode(AES_KEY);int base = 16;if (keyByte.length % base != 0) {int groups = keyByte.length / base + 1;byte[] temp = new byte[groups * base];Arrays.fill(temp, (byte) 0);System.arraycopy(keyByte, 0, temp, 0, keyByte.length);keyByte = temp;}SecretKeySpec secretKeySpec = new SecretKeySpec(keyByte,AES);Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE,secretKeySpec,new IvParameterSpec(decoder.decode(AES_IV)));byte[] result = cipher.doFinal(content.getBytes(ENCODE));return Base64.getEncoder().encodeToString(result);}/*** AES解密* @param content 密文* @param AES_IV 解密偏移量* @param AES_KEY 解密密钥* @return 解密后明文* @throws Exception 异常*/public static String AESDecodeDecrypt(String content,String AES_IV,String AES_KEY) throws Exception{Base64.Decoder decoder = Base64.getDecoder();byte[] keyByte = decoder.decode(AES_KEY);int base = 16;if (keyByte.length % base != 0) {int groups = keyByte.length / base + 1;byte[] temp = new byte[groups * base];Arrays.fill(temp, (byte) 0);System.arraycopy(keyByte, 0, temp, 0, keyByte.length);keyByte = temp;}SecretKeySpec secretKeySpec = new SecretKeySpec(keyByte,AES);Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);cipher.init(Cipher.DECRYPT_MODE,secretKeySpec,new IvParameterSpec(decoder.decode(AES_IV)));byte[] base64 = decoder.decode(content);byte[] result = cipher.doFinal(base64);return new String(result, Charset.forName(ENCODE));}/*** Rsa生成公钥,密钥* @return 返回公钥,密钥字符串数组 0--密钥 1--公钥* @throws NoSuchAlgorithmException 异常信息*/public static String[] RsaGenera() throws NoSuchAlgorithmException {// 1.初始化发送方密钥KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");keyPairGenerator.initialize(512);KeyPair keyPair = keyPairGenerator.generateKeyPair();RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();String[] results = new String[2];results[0] = Base64.getEncoder().encodeToString(rsaPrivateKey.getEncoded());results[1] = Base64.getEncoder().encodeToString(rsaPublicKey.getEncoded());return results;}/*** Rsa私钥加密* @param privateKey 私钥* @param content 明文* @return 返回密文* @throws Exception 异常*/public static String RsaPrivateEncrypt(String privateKey,String content) throws Exception {PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey));KeyFactory keyFactory = KeyFactory.getInstance("RSA");PrivateKey privateKey1 = keyFactory.generatePrivate(pkcs8EncodedKeySpec);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, privateKey1);byte[] result = cipher.doFinal(content.getBytes(ENCODE));//System.out.println("私钥加密、公钥解密 ---- 加密:" + Arrays.toString(result));return Base64.getEncoder().encodeToString(result);}/*** Rsa公钥解密* @param publicKey 公钥* @param content 密文* @return 明文* @throws Exception 异常*/public static String RsaPublicUnEncrypt(String publicKey,String content) throws Exception{X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey));KeyFactory keyFactory = KeyFactory.getInstance("RSA");PublicKey publicKey1 = keyFactory.generatePublic(x509EncodedKeySpec);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, publicKey1);byte[] result = cipher.doFinal(Base64.getDecoder().decode(content));//System.out.println("私钥加密、公钥解密 ---- 解密:" + Base64.getEncoder().encodeToString(result));return Base64.getEncoder().encodeToString(result);}/*** Rsa公钥加密* @param publicKey 公钥* @param content 明文* @return 密文* @throws Exception 异常*/public static String RsaPublicEncrypt(String publicKey,String content) throws Exception{X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey));KeyFactory keyFactory = KeyFactory.getInstance("RSA");PublicKey publicKey1 = keyFactory.generatePublic(x509EncodedKeySpec2);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, publicKey1);byte[] result = cipher.doFinal(content.getBytes(ENCODE));//System.out.println("公钥加密、私钥解密 ---- 加密: "+Base64.getEncoder().encodeToString(result2));return Base64.getEncoder().encodeToString(result);}/*** Rsa私钥解密* @param privateKey 私钥* @param content 密文* @return 解密后明文* @throws Exception 异常*/public static String RsaPrivateUnEncrypt(String privateKey,String content) throws Exception{PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey));KeyFactory keyFactory = KeyFactory.getInstance("RSA");PrivateKey privateKey1 = keyFactory.generatePrivate(pkcs8EncodedKeySpec5);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, privateKey1);byte[] result = cipher.doFinal(Base64.getDecoder().decode(content));//System.out.println("公钥加密、私钥解密 ---- 解密:" + new String(result));return new String(result);}public static void main(String[] args) throws Exception {String[] keys = RsaGenera();String aes_key = RsaPublicEncrypt(keys[1],AES_KEY);String aes_iv = RsaPublicEncrypt(keys[1],AES_IV);String AES_KEY = RsaPrivateUnEncrypt(keys[0],aes_key);String AES_IV = RsaPrivateUnEncrypt(keys[0],aes_iv);String m = AESEncryptEncode("今天打老虎",AES_IV,AES_KEY);System.out.println("AES对称加密: "+m);System.out.println("AES对称解密:"+AESDecodeDecrypt(m,AES_IV,AES_KEY));}
}

1.安全传输加密算法相关推荐

  1. WR/HR/AR/TR/MR系列自组网电台-传输加密算法

    WR/HR/AR/TR/MR系列自组网电台都具有传输加密功能,用于保证信息传输安全.其中,WR系列电台具有AES128和AES256加密功能,HR/AR/TR/MR系列电台具有DES.AES128和A ...

  2. centos linux 系统日常管理4 scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法 第十七节课...

    centos linux 系统日常管理4  scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法  第十七节课 rsync可以增量同步,scp不行 ...

  3. 面向智能机器人的通讯安全机制研究与改进

    摘要:射频技术当前发展速度迅猛,在目前的无线通信中占据主导地位.作为射频技术的主要分支之一,点对点射频通讯技术也有着十分广泛的应用,在智能机器人的通讯领域具有重要的地位.但是当前所使用的点对点射频通讯 ...

  4. SMB小传 —— SMB网络文件系统协议介绍

    SMB网络文件系统协议, 全名服务器消息块(Server Message Block),曾用名CIFS(通用互联网文件系统 Common Internet File System), 公元1983年诞 ...

  5. 大三专科实习第一个月——HTTPS底层原理详解

    简介:脱变从现在开始,以上文章讲述的是广度问题接下来方向将是深度的问题.觉得我还可以的可以加群探讨技术QQ群:1076570504 个人学习资料库http://www.aolanghs.com/ 微信 ...

  6. MacBook 与其他设备的低成本高性能数据传输方案

    本篇文章分享在不使用路由器的情况下,使用"数据线或网线"将 MacBook 与其他设备连接在一起,获得更高效率的数据交换性能. 写在前面 最近考虑将 Mac 设备和其他的设备连在一 ...

  7. 网内计算:可编程数据平面和技术特定应用综述

    网内计算:可编程数据平面和技术特定应用综述 摘要--与云计算相比,边缘计算提供了更靠近终端设备的处理,降低了用户体验的延迟.最新的In-Network Computing范例采用可编程网络元素在数据达 ...

  8. 网络 http(基于tcp协议)

    (1)请求头参数详解(Request): 第一行: 由请求方法+请求url+http协议版本构成,如 GET /Test/index.html HTTP/1.1.值得注意的是,请求url和Host属性 ...

  9. iOS 网络传输数据安全以及常用的加密算法使用

    我们常说的数据安全:主要分为两种,数据本身的安全和数据防护安全. 数据本身的安全包括数据保密,数据完整性验证,数据双向认证等. 数据防护安全包括磁盘阵列,数据备份,异地容灾等. App安全问题主要包括 ...

最新文章

  1. util包下的Date与sql包下的Date之间的转换
  2. C# 操作http协议学习总结
  3. android自定义图片文本,Android 实现文字与图片的混排
  4. Linux命令及Linux终端的20个趣事
  5. uibot和按键精灵区别_uibot和按键精灵哪个强大
  6. SpringBoot : Consider defining a bean of type xxx in your configuration.
  7. 2021安新中学高考成绩查询,石家庄二中雄安校区•河北安新中学2019届冲刺高考百日誓师大会...
  8. 苹果ios签名系统源码|ios免签封装
  9. cpu性能天梯图服务器 4210,手机CPU性能天梯图
  10. iOS 页面切换控制
  11. 本人面试两个月真实经历:面试了20家大厂之后,发现这样介绍项目经验,显得项目很牛逼!
  12. php+Sphinx分词中间件的认识和基础使用(亲测)
  13. 用例图包含关系、扩展关系、泛化关系解析
  14. 【水果识别】基于形态学实现水果识别含Matlab源码
  15. 理解F.dropout 和nn.ReLU(inplace=True)中inplace的作用
  16. 决战奶酪之巅,剑指Big Cheeze
  17. organici iherb2
  18. 史上最全的HTML、CSS知识点总结,浅显易懂。适合入门新手
  19. ios开发 多人语音聊天_iOS-实现多人语音聊天室-场景实践-音视频通话2.0-网易云信开发文档...
  20. 【热门主题:喵星人高清桌面壁纸】

热门文章

  1. RealPlayer 11 简体中文最新正式版下载
  2. Windows Server 2012 R2 部署JavaWeb项目之环境、软件、配置
  3. 网上支付跨行清算系统简介
  4. 达内学python_通过在达内学习python我的职场之路更加宽广了
  5. PS2汉化实例-《魔塔大陆》
  6. 反编译 APKTool 逆向助手
  7. Python学习之读取TIFF文件
  8. JDK8新特性(五):JDK8时间日期API
  9. [译]csc_matrix
  10. iView Table合并单元格(行、列)