当前位置:  编程技术>移动开发
本页文章导读:
    ▪运用keytool来创建管理密钥及证书        使用keytool来创建管理密钥及证书 使用SSL来实现安全加密通讯需要有密码对及公钥证书等.. JDK中自带的一个工具keytool就可以用来生成密钥对..管理密码仓库以及证书的导入导出.. keytool的默认.........
    ▪ SSL保险socket的通讯实例        SSL安全socket的通讯实例 学习了SSL的基本原理后..动手用java来实现了一个安全连接的实例..1.使用keytool创建密钥对..并在服务端和客户端完成分配..具体方法可参看:java-使用keytool来创建管理密钥.........
    ▪ Andriod 札记       Andriod 笔记 android反编译,android的apk反编译工具,适合大家一起学,可以把android生成的apk转为java代码,希望对大家有用。一、更改apk文件的后缀名,如:LianyunHelper3.0.11.apk改成LianyunHelper3.0.11..........

[1]运用keytool来创建管理密钥及证书
    来源: 互联网  发布时间: 2014-02-18
使用keytool来创建管理密钥及证书

使用SSL来实现安全加密通讯需要有密码对及公钥证书等..

JDK中自带的一个工具keytool就可以用来生成密钥对..管理密码仓库以及证书的导入导出..

keytool的默认路径在~\java\jdk1.7.0\bin\下..以下介绍keytool的几种基本应用..

1)创建服务端密钥库

>keytool -genkey -keystore d:\serverkey.jks -keyalg rsa -alias ssl1 -validity 700

上述命令中:

-genkey 生成密钥对

-keystore 指定密码仓库的文件地址

-keyalg 密钥所使用的算法

-alias 密钥别名..使用密钥时是使用此别名来区分的

-validity 密钥有效期(天)..从当前系统时间开始计算

该命令成功后会要求输入密码仓库的密码..例如111111

然后是输入你的个人信息..

最后会要求输入别名的密码..例如222222

创建成功后..在建立服务端的SSL连接时用下述方法导入密钥..

String keyFile = serverkey.jks

String keyFilePass = "111111"

KeyStore ks = KeyStore.getInstance("JKS");

ks.load(new FileInputStream(keyFile), keyFilePass.toCharArray());

再利用该密码仓库来进行相应操作..

2)将服务端的公钥导出成证书

>keytool -export -alias ssl1 -file d:\ssl1.cer -keystore d:\serverkey.jks

-export 导出

导出成功后就得到了ssl1.cer这一份证书了..然后就是要将这一份证书分发给客户端..客户端有了该证书后就能与服务端建立安全连接了..

3)生成客户端的密钥仓库

方法与1)类似..

4)将*.cer导入到客户端的密钥仓库里

>keytool -import -file d:\ssl1.cer -keystore d:\clientkey.jks

-import 导入

上述命令成功后会要求输入客户端密钥仓库的密码..

成功后在每次要访问服务端之前还要将该证书添加到受信域中..系统会自动从受信域中检查可用的证书来完成SSL连接通讯..

String keyFile = clientkey.jks

String keyFilePass = "111111"

System.setProperty("javax.net.ssl.trustStore",keyFile);

System.setProperty("javax.net.ssl.trustStorePassword",keyFilePass);

以上..实现了密钥对的创建及管理之后..我们就可以开始实现SSL通讯了..

 


    
[2] SSL保险socket的通讯实例
    来源: 互联网  发布时间: 2014-02-18
SSL安全socket的通讯实例
学习了SSL的基本原理后..动手用java来实现了一个安全连接的实例..
1.使用keytool创建密钥对..并在服务端和客户端完成分配..具体方法可参看:java-使用keytool来创建管理密钥及证书
2.建立客户端和服务端的socket实例:
客户端代码如下:
public class SSLClient {
public static void startSSLClient() throws IOException {
int port = 15408;//要连接的服务器端口
String serverAdd = "127.0.0.1";//要连接的服务器地址
try {
System.setProperty("javax.net.ssl.trustStore","clientkey.jks");//设置可信任的密钥仓库
System.setProperty("javax.net.ssl.trustStorePassword","sslkey1"); //设置可信任的密钥仓库的密码
SSLSocketFactory sslsf = (SSLSocketFactory)SSLSocketFactory.getDefault();//利用工厂来创建SSLSocket安全套接字
Socket csocket = sslsf.createSocket(serverAdd,port);//创建并连接服务器
System.out.println("Client OK~");
System.out.println("===============");
System.out.println("");
//以下代码同socket通讯实例中的代码
BufferedReader socketIn = new BufferedReader( new InputStreamReader(csocket.getInputStream()));//接受到的信息
PrintStream socketOut = new PrintStream(csocket.getOutputStream());//要发送的信息
BufferedReader userIn = new BufferedReader( new InputStreamReader(System.in));//用户输入信息
String s;
while ( true ) {
System.out.print("Client Message: ");
s = userIn.readLine();
socketOut.println(s);
if ( s.trim().equals("BYE") ) break;
else {
System.out.println("Please wait Server Message..");
System.out.println("");
}
s = socketIn.readLine();
System.out.println("Server Message: " + s);
if ( s.trim().equals("BYE") ) break;
}
socketIn.close();
socketOut.close();
userIn.close();
csocket.close();
}
catch (Exception e) {
System.out.println("Error: " + e);
}
}
public static void main(String[] args) {
try {
startSSLClient();
}
catch (Exception e) {
System.out.println("Error: " + e);
}
}
}
服务端代码如下:(这里像换种方式写..结果写烦了..呵呵)
public class SSLServer {
public static void startSSLServer() throws IOException {
int port = 15408;//监听端口
String keyFile = "serverkey.jks";//密钥库文件
String keyFilePass = "sslkey1";//密钥库的密码
String keyPass = "sslkey1";//密钥别名的密码
SSLServerSocket sslsocket = null;//安全连接套接字
KeyStore ks;//密钥库
KeyManagerFactory kmf;//密钥管理工厂
SSLContext sslc = null;//安全连接方式
//初始化安全连接的密钥
try {
ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keyFile), keyFilePass.toCharArray());
kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks,keyPass.toCharArray());
sslc = SSLContext.getInstance("SSLv3");
sslc.init(kmf.getKeyManagers(), null, null);
} catch (KeyManagementException ex) {
Logger.getLogger(SSLServer.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnrecoverableKeyException ex) {
Logger.getLogger(SSLServer.class.getName()).log(Level.SEVERE, null, ex);
} catch (KeyStoreException ex) {
Logger.getLogger(SSLServer.class.getName()).log(Level.SEVERE, null, ex);
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(SSLServer.class.getName()).log(Level.SEVERE, null, ex);
} catch (CertificateException ex) {
Logger.getLogger(SSLServer.class.getName()).log(Level.SEVERE, null, ex);
}
//用安全连接的工厂来创建安全连接套接字
SSLServerSocketFactory sslssf = sslc.getServerSocketFactory();
sslsocket = (SSLServerSocket) sslssf.createServerSocket(port);//创建并进入监听
System.out.println("Listening...");
SSLSocket ssocket = (SSLSocket)sslsocket.accept();//接受客户端的连接
System.out.println("Server Connection OK~");
System.out.println("========================");
System.out.println("");
//以下代码同socket通讯实例中的代码
BufferedReader socketIn = new BufferedReader(new InputStreamReader(ssocket.getInputStream()));
BufferedReader userIn = new BufferedReader(new InputStreamReader(System.in));
PrintStream socketOut = new PrintStream(ssocket.getOutputStream());
String s;
while (true) {
System.out.println("Please wait client 's message..");
System.out.println("");
s = socketIn.readLine();
System.out.println("Client Message: " + s);
if ( s.trim().equals("BYE") ) break;
System.out.print("Server Message: ");
s = userIn.readLine();
socketOut.println(s);
if ( s.trim().equals("BYE") ) break;
}
socketIn.close();
socketOut.close();
userIn.close();
sslsocket.close();
}
public static void main(String [] args) {
try {
startSSLServer();
}
catch (Exception e) {
System.out.println("Error: " + e);
}
}
}
以上..基本实现了SSL连接..用wireshark抓包比较..证明此方法确实经过加密..比较安全..

 


    
[3] Andriod 札记
    来源: 互联网  发布时间: 2014-02-18
Andriod 笔记
android反编译,android的apk反编译工具,适合大家一起学,可以把android生成的apk转为java代码,希望对大家有用。
一、更改apk文件的后缀名,如:LianyunHelper3.0.11.apk改成LianyunHelper3.0.11.zip
二、用zip解压缩LianyunHelper3.0.11.zip文件
三、从解压缩的文件夹中取出classes.dex文件并放到dex2jar.bat所在目录
四、运行cmd命令,进入dex2jar.bat所在的目录,输入dex2jar.bat classes.dex即可生成classes.dex.dex2jar.jar文件
五、用jd-gui工具打开classes.dex.dex2jar.jar文件,即可看到源码
六、将AndroidManifest.xml文件放到AXMLPrinter2.jar所在目录,运行cmd命令,进入 AXMLPrinter2.jar所在目录,输入java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt。

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
互联网 iis7站长之家
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3