导航:首页 > 操作系统 > bouncycastleandroid

bouncycastleandroid

发布时间:2023-10-01 13:21:50

㈠ AES加密 在PC上和android上不一样 怎么解决

你没有指定RNG的Provider
未指定的情况下 Android 2.3以上版本使用的是 随机数序列是 Android's OpenSSL-backed security provider
以下版本是 BouncyCastle Security Provider

JDK 1.7内没有这个Provider, 这个Android自己搞的,你服务端一定解不出来的。

目前Android支持的 RNG有以下几种

Android's OpenSSL-backed security provider 1ASN.1, DER, PkiPath, PKCS7
BouncyCastle Security Provider v1.49 HARMONY (SHA1 digest; SecureRandom; SHA1withDSA signature) Harmony JSSE Provider Android KeyStore security provider
服务端如果也没指定的话,默认使用的是

SUN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRandom; X.509 certificates; JKS keystore; PKIX CertPathValidator; PKIX CertPathBuilder; LDAP, Collection CertStores, javaPolicy Policy; JavaLoginConfig Configuration)
Oracle JDK 1.7 环境下 支持以下

SUN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRandom; X.509 certificates; JKS keystore; PKIX CertPathValidator; PKIX CertPathBuilder; LDAP, Collection CertStores, JavaPolicy Policy; JavaLoginConfig Configuration)
Sun RSA signature provider
Sun Elliptic Curve provider (EC, ECDSA, ECDH)
Sun JSSE provider(PKCS12, SunX509 key/trust factories, SSLv3, TLSv1)
SunJCE Provider (implements RSA, DES, Triple DES, AES, Blowfish, ARCFOUR, RC2, PBE, Diffie-Hellman, HMAC)
Sun (Kerberos v5, SPNEGO)
Sun SASL provider(implements client mechanisms for: DIGEST-MD5, GSSAPI, EXTERNAL, PLAIN, CRAM-MD5, NTLM; server mechanisms for: DIGEST-MD5, GSSAPI, CRAM-MD5, NTLM)
XMLDSig (DOM XMLSignatureFactory; DOM KeyInfoFactory)
Sun PC/SC provider
Sun's Microsoft Crypto API provider

你们服务端要是用的 什么 OPENJDK 第三方虚拟机,php什么的话,那就只有天知道支不支持了。

不过你看也知道了 JDK里的都是SUN自己搞的, Android JVM里挂载的不是Android专用的就是第三方开源的,我估计你是找不到一样的 随机数生成器 方案了

㈡ 如何生成android的BKS证书

android 系统中使用的证书要求以BKS的库文件结构保存,通常情况下,我们使用java的keytool只能生成jks的证书库,如果生成BKS的则需要下载BC库,如是JDK1.6则下载bcprov-jdk16-141.jar,且将该文件放到jdk1.6.0_03\jre\lib\ext目录下,然后运行以下命令即可以生成BKS的证书库和相应的证书。

keytool -genkey -alias <别名> -keypass <密钥口令> -keyalg RSA -keysize 1024 -validity 365 -keystore <库文件名,如runcerts.keystore> -storepass <证书库密码> -dname "cn=runtestuser3, ou=vpn, o=run, c=CN, l=shanghai" -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider

或是:
keytool -import -alias serverkey -file server.crt -keystore tclient.bks -
storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider


1

android 系统中使用的证书要求以BKS的库文件结构保存,通常情况下,我们使用java的keytool只能生成jks的证书库,如果生成BKS的则需要下载BC库,如是JDK1.6则下载bcprov-jdk16-141.jar,且将该文件放到jdk1.6.0_03\jre\lib\ext目录下,然后运行以下命令即可以生成BKS的证书库和相应的证书。

keytool -genkey -alias <别名> -keypass <密钥口令> -keyalg RSA -keysize 1024 -validity 365 -keystore <库文件名,如runcerts.keystore> -storepass <证书库密码> -dname "cn=runtestuser3, ou=vpn, o=run, c=CN, l=shanghai" -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider

或是:
keytool -import -alias serverkey -file server.crt -keystore tclient.bks -
storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider


1

㈢ 在Android应用中使用自定义https证书,CER转BKS

安卓配置这些需要:

1.客户端的P12证书 :发送给服务端验证

2.服务端的cer证书: App本地需要转BKS证书,因为安卓只识别此证书

CER转BKS

keytool -importcert -v -trustcacerts -alias 位置1 \

-file 位置2 \

-keystore 位置3 -storetype BKS \

-providerclass org.bouncycastle.jce.provider.BouncyCastleProvider \

-providerpath 位置4 -storepass 位置5

例子

keytool -importcert -v -trustcacerts -alias xx -file E:\bks\xx.cer -keystore E:\bks\xx.bks -storetype BKS -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath E:\bks\bcprov-jdk15on-146.jar -storepass xxxxxx

将证书内容提取成字符串:

keytool -printcert -rfc -file xxx.cer

查看bks证书库列表

命令:

keytool -list -rfc -keystore mytrustcerts.bks -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider -storepass '123456'

㈣ Android在用AES加密字符串之后再用base64加密,加密的结果跟ios端不一样,

之前在项目上用到AES256加密解密算法,刚开始在java端加密解密都没有问题,在iOS端加密解密也没有问题。但是奇怪的是在java端加密后的文件在iOS端无法正确解密打开,然后简单测试了一下,发现在java端和iOS端采用相同明文,相同密钥加密后的密文不一样!上网查了资料后发现iOS中AES加密算法采用的填充是PKCS7Padding,而java不支持PKCS7Padding,只支持PKCS5Padding。我们知道加密算法由算法+模式+填充组成,所以这两者不同的填充算法导致相同明文相同密钥加密后出现密文不一致的情况。那么我们需要在java中用PKCS7Padding来填充,这样就可以和iOS端填充算法一致了。
要实现在java端用PKCS7Padding填充,需要用到bouncycastle组件来实现,下面我会提供该包的下载。啰嗦了一大堆,下面是一个简单的测试,上代码!
001 package com.encrypt.file;
002
003
004 import java.io.UnsupportedEncodingException;
005 importjava.security.Key;
006 import java.security.Security;
007
008 importjavax.crypto.Cipher;
009 importjavax.crypto.SecretKey;
010 importjavax.crypto.spec.SecretKeySpec;
011
012 public classAES256Encryption{
013
014 /**
015 * 密钥算法
016 * java6支持56位密钥,bouncycastle支持64位
017 * */
018 public static finalString KEY_ALGORITHM="AES";
019
020 /**
021 * 加密/解密算法/工作模式/填充方式
022 *
023 * JAVA6 支持PKCS5PADDING填充方式
024 * Bouncy castle支持PKCS7Padding填充方式
025 * */
026 public static finalString CIPHER_ALGORITHM="AES/ECB/PKCS7Padding";
027
028 /**
029 *
030 * 生成密钥,java6只支持56位密钥,bouncycastle支持64位密钥
031 * @return byte[] 二进制密钥
032 * */
033 public static byte[] initkey() throwsException{
034
035 // //实例化密钥生成器
036 // Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
037 // KeyGenerator kg=KeyGenerator.getInstance(KEY_ALGORITHM, "BC");
038 // //初始化密钥生成器,AES要求密钥长度为128位、192位、256位
039 //// kg.init(256);
040 // kg.init(128);
041 // //生成密钥
042 // SecretKey secretKey=kg.generateKey();
043 // //获取二进制密钥编码形式
044 // return secretKey.getEncoded();
045 //为了便于测试,这里我把key写死了,如果大家需要自动生成,可用上面注释掉的代码
046 return new byte[] { 0x08, 0x08, 0x04, 0x0b, 0x02, 0x0f, 0x0b, 0x0c,
047 0x01, 0x03, 0x09, 0x07, 0x0c, 0x03, 0x07, 0x0a, 0x04, 0x0f,
048 0x06, 0x0f, 0x0e, 0x09, 0x05, 0x01, 0x0a, 0x0a, 0x01, 0x09,
049 0x06, 0x07, 0x09, 0x0d };
050 }
051
052 /**
053 * 转换密钥
054 * @param key 二进制密钥
055 * @return Key 密钥
056 * */
057 public static Key toKey(byte[] key) throwsException{
058 //实例化DES密钥
059 //生成密钥
060 SecretKey secretKey=newSecretKeySpec(key,KEY_ALGORITHM);
061 returnsecretKey;
062 }
063
064 /**
065 * 加密数据
066 * @param data 待加密数据
067 * @param key 密钥
068 * @return byte[] 加密后的数据
069 * */
070 public static byte[] encrypt(byte[] data,byte[] key) throwsException{
071 //还原密钥
072 Key k=toKey(key);
073 /**
074 * 实例化
075 * 使用 PKCS7PADDING 填充方式,按如下方式实现,就是调用bouncycastle组件实现
076 * Cipher.getInstance(CIPHER_ALGORITHM,"BC")
077 */
078 Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
079 Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM, "BC");
080 //初始化,设置为加密模式
081 cipher.init(Cipher.ENCRYPT_MODE, k);
082 //执行操作
083 returncipher.doFinal(data);
084 }
085 /**
086 * 解密数据
087 * @param data 待解密数据
088 * @param key 密钥
089 * @return byte[] 解密后的数据
090 * */
091 public static byte[] decrypt(byte[] data,byte[] key) throwsException{
092 //欢迎密钥
093 Key k =toKey(key);
094 /**
095 * 实例化
096 * 使用 PKCS7PADDING 填充方式,按如下方式实现,就是调用bouncycastle组件实现
097 * Cipher.getInstance(CIPHER_ALGORITHM,"BC")
098 */
099 Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM);
100 //初始化,设置为解密模式
101 cipher.init(Cipher.DECRYPT_MODE, k);
102 //执行操作
103 returncipher.doFinal(data);
104 }
105 /**
106 * @param args
107 * @throws UnsupportedEncodingException
108 * @throws Exception
109 */
110 public static void main(String[] args) {
111
112 String str="AES";
113 System.out.println("原文:"+str);
114
115 //初始化密钥
116 byte[] key;
117 try {
118 key = AES256Encryption.initkey();
119 System.out.print("密钥:");
120 for(int i = 0;i<key.length;i++){
121 System.out.printf("%x", key[i]);
122 }
123 System.out.print("\n");
124 //加密数据
125 byte[] data=AES256Encryption.encrypt(str.getBytes(), key);
126 System.out.print("加密后:");
127 for(int i = 0;i<data.length;i++){
128 System.out.printf("%x", data[i]);
129 }
130 System.out.print("\n");
131
132 //解密数据
133 data=AES256Encryption.decrypt(data, key);
134 System.out.println("解密后:"+newString(data));
135 } catch (Exception e) {
136 // TODO Auto-generated catch block
137 e.printStackTrace();
138 }
139
140 }
141 }
运行程序后的结果截图:

ViewController.m文件

01 //
02 // ViewController.m
03 // AES256EncryptionDemo
04 //
05 // Created by 孙 裔 on 12-12-13.
06 // Copyright (c) 2012年 rich sun. All rights reserved.
07 //
08
09 #import "ViewController.h"
10 #import "EncryptAndDecrypt.h"
11
12 @interface ViewController ()
13
14 @end
15
16 @implementation ViewController
17 @synthesize plainTextField;
18 - (void)viewDidLoad
19 {
20 [super viewDidLoad];
21 // Do any additional setup after loading the view, typically from a nib.
22 }
23
24 - (void)didReceiveMemoryWarning
25 {
26 [super didReceiveMemoryWarning];
27 // Dispose of any resources that can be recreated.
28 }
29 //这个函数实现了用户输入完后点击视图背景,关闭键盘
30 - (IBAction)backgroundTap:(id)sender{
31 [plainTextField resignFirstResponder];
32 }
33
34 - (IBAction)encrypt:(id)sender {
35
36 NSString *plainText = plainTextField.text;//明文
37 NSData *plainTextData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
38
39 //为了测试,这里先把密钥写死
40 Byte keyByte[] = {0x08,0x08,0x04,0x0b,0x02,0x0f,0x0b,0x0c,0x01,0x03,0x09,0x07,0x0c,0x03,
41 0x07,0x0a,0x04,0x0f,0x06,0x0f,0x0e,0x09,0x05,0x01,0x0a,0x0a,0x01,0x09,
42 0x06,0x07,0x09,0x0d};
43 //byte转换为NSData类型,以便下边加密方法的调用
44 NSData *keyData = [[NSData alloc] initWithBytes:keyByte length:32];
45 //
46 NSData *cipherTextData = [plainTextData AES256EncryptWithKey:keyData];
47 Byte *plainTextByte = (Byte *)[cipherTextData bytes];
48 for(int i=0;i<[cipherTextData length];i++){
49 printf("%x",plainTextByte[i]);
50 }
51
52 }
53 @end

㈤ 有什么软件可以使androidtv 重启到recovery

本文内容ROM开发者联盟小编将给大家介绍的就是怎样在中关机菜单加入重启模式!

一、修改framework-res.apk

1、反编译后添加三张图片到resdrawable-hdpi目录下。

2、打开resvaluesstrings.xml,在最下面添加:

<string name="reboot">Reboot</string>

<string name="recovery">Recovery</string>

<string name="bootloader">Bootloader</string>

3、打开resvalues-zh-rCNstrings.xml,在最下面添加:

<string name="reboot">重启</string>

<string name="recovery">重启至Recovery</string>

<string name="bootloader">重启至Bootloader</string>

4、重新编译framework-res为framework-res-new.apk,解出resources.arsc以不压缩的形式替换到原版framework-res.apk中,然后将三张图片加入到相应位置。

二、修改android.policy.jar
1、打开.smali文件,在
.method private createDialog()Landroid/app/AlertDialog;

范围内(电源选项)查找

[Lcom/android/internal/policy/impl/GlobalActions$Action;

找到后修改为:

const/4 v0, 0x4

new-array v0, v0, [Lcom/android/internal/policy/impl/GlobalActions$Action;

注:0x4表示电源选项中有4个菜单,可修改为自己需要的条目数量。

2、

const/4 v1, 0x
0

new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$
4
;
const v3,
0x1080030
# 所对应的图标

const v4,
0x104011a
# 所对应的文字

invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$
4
;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V

aput-object v2, v0, v1

此为一个完整的菜单命令。一般有多个,可改变它们的顺序、亦可增加或删减。
注:0x1080030在framework-res esvaluespublic.xml中所对应的数值为:0x01080030。

一般修改的话复制关机的那条命令修改,修改的地方为上面代码红色部分。

3、这段代码最后总的结尾为:
invoke-static {v0}, Lcom/google/android/collect/Lists;->newArrayList([Ljava/lang/Object;)Ljava/util/ArrayList;
move-result-object v0
iput-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItemsjava/util/ArrayList;
所以添加命令的时候一定要注意加在上一个代码的aput-object v2, v0, v1后面和总结尾的前面。

4、将GlobalActions$4.smali(关机所对应的那个文件)复制三份,分别命名为:GlobalActions$8.smali、

GlobalActions$9.smali、GlobalActions$10.smali(命名规则是:GlobalActions$xx.smali,“xx-1”为最后一个数
字)。

5、以修改GlobalActions$8.smali为例说明:

(1)打开后替换GlobalActions$4为GlobalActions$8,一共三处。

(2)找到:

invoke-static {v0, v1}, Lcom/android/internal/app/ShutdownThread;->shutdown(Landroid/content/Context;Z)V

修改为: (重启)

const-string v2, "now"

invoke-static {v0, v2, v1}, Lcom/android/internal/app/ShutdownThread;->reboot(Landroid/content/Context;Ljava/lang/String;Z)V

修改为: (重启到recovery)

const-string v2, "recovery"

invoke-static {v0, v2, v1}, Lcom/android/internal/app/ShutdownThread;->reboot(Landroid/content/Context;Ljava/lang/String;Z)V

修改为: (重启到bootloader)

const-string v2, "bootloader"

invoke-static {v0, v2, v1}, Lcom/android/internal/app/ShutdownThread;->reboot(Landroid/content/Context;Ljava/lang/String;Z)V

注:有的机器重启到bootloader命令为download,例如三星的机器。

要使用ANSI编码

6、打包
java -jar smali.jar 1132 -o classes.dex

7、刷入即可。
如果为odex化的rom修改方法如下:

1、解包android.policy.odex
复制/system/framework目录下的所有文件到smali文件夹下(可用adb命令)
然后执行:
java -Xmx1024m -jar baksmali.jar -c :core.jar:bouncycastle.jar:ext.jar:framework.jar:android.policy.jar:services.jar:core-junit.jar -x android.policy.odex
得到out目录
修改过程同上。

2、打包:
java -Xmx1024m -jar smali.jar out -o classes.dex

3、用winrar打开android.policy.jar把得到的classes.dex拖放进去。

4、把dexopt-wrapper上传到手机,并给权限

adb push dexopt-wrapper /system/bin
adb shell chmod 755 /system/bin/dexopt-wrapper

5、把android.policy.jar传送到手机/sdcard/
adb push android.policy.jar /sdcard/android.policy.jar

6、然后执行以下命令:

adb shell
busybox mount -o remount,rw /system
busybox cp -f /system/framework/android.policy.jar /system/framework/android.policy.jar.bak
busybox cp -f /system/framework/android.policy.odex /system/framework/android.policy.odex.bak
busybox cp -f /sdcard/android.policy.jar /system/framework/android.policy.jar
rm /system/framework/android.policy.odex
dexopt-wrapper /system/framework/android.policy.jar /system/framework/android.policy.odex /system/framework/core.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/core-junit.jar

busybox dd if=/system/framework/android.policy.odex.bak of=/system/framework/android.policy.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
busybox cp -f /system/framework/android.policy.jar.bak /system/framework/android.policy.jar
rm /system/framework/android.policy.jar.bak
rm /system/framework/android.policy.odex.bak

reboot
命令解释:
busybox dd if=/system/framework/android.policy.odex.bak of=/system/framework/android.policy.odex bs=1 count=20 skip=52 seek=52 conv=notrunc

意思为复制android.policy.odex.bak中的签名到android.policy.odex中即可。

㈥ 如何访问一个SSL连接通过Android的

在用Android平台上使用SSL,需要三步:

第一步 生成证书

1. 生成服务器端的证书

keytool-genkey-aliastest-keystoretest.jks

2. 将keystore中的cert导出来,用来生成客户端的验证证书

keytool-exportcert-aliastest-filetest.cert-keystoretest.jks

3. 生成Android平台的证书

因为Android 要求要BC证书,而Java的keytool本身不提供BKS格式,因此要自己

手动配置。个人在配置的过程到了文件正在使用中,保存失败的情况,我的做法是将

文件备份一下,用unlocker删除后将修改好备份放到原位置就好了。方法如下:

(1)下载bcprov-ext-jdk15on-146.jar

可以选择到官网,也可以到我上传好的文件去下载,注意,用最新的149版本的会

有证书版本号不对的异常,改用146的则没有这个问题

(2) 配置bcprov

在jdk_homejrelibsecurity目录中找到java.security 在内容增加一行(数字

可以自己定义)

security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider

(3) 生成android平台的证书

keytool-importcert-keystoretest.bks-filetest.cert-storetypeBKS-providerorg.bouncycastle.jce.provider.BouncyCastleProvider


第二步 编写服务器代码(主要代码如下)

importjava.io.BufferedInputStream;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
importjava.net.ServerSocket;
importjava.net.Socket;
importjava.net.SocketAddress;
importjava.security.KeyManagementException;
importjava.security.KeyStore;
importjava.security.KeyStoreException;
importjava.security.NoSuchAlgorithmException;
importjava.security.UnrecoverableKeyException;
importjava.security.cert.CertificateException;
importjavax.net.ServerSocketFactory;
importjavax.net.ssl.KeyManager;
importjavax.net.ssl.KeyManagerFactory;
importjavax.net.ssl.SSLContext;
/**
*@TODOjava线程开发之四SSL加密
*开发步骤
*1.生成服务端密钥
*2.导出服务端证书
*3.生成客户端密钥
*4.程序开发测试
*参考资料:http://chrui.iteye.com/blog/1018778
*@version1.0
*@date2013-5-723:22:45
*@update2013-5-810:22:45
*/
publicclassServer{
;
privatefinalstaticchar[]password="1qaz2wsx".toCharArray();
privateSSLContextcontext;
privateInputStreaminputStream;

publicServer(){
inputStream=this.getClass().getResourceAsStream("/test.jks");
initContext();
try{
//直接运行会报javax.net.ssl.SSLException:
//ServerSocketFactoryfactory=SSLServerSocketFactory.getDefault();
ServerSocketFactoryfactory=context.getServerSocketFactory();
//serverSocket=newServerSocket(10000);
serverSocket=factory.createServerSocket(10000);
System.out.println("======启动安全SocektServer成功=========");
while(true){
Socketsocket=serverSocket.accept();
newReceiveSocket(socket).start();
}
}catch(IOExceptione){
e.printStackTrace();
}
}

//ssl上下文对象的初始化
privatevoidinitContext(){
try{
KeyStorestore=KeyStore.getInstance("JKS");
store.load(inputStream,password);
KeyManagerFactoryfactory=KeyManagerFactory.getInstance("SunX509");
factory.init(store,password);
KeyManager[]keyManagers=factory.getKeyManagers();
context=SSLContext.getInstance("SSL");
context.init(keyManagers,null,null);
}catch(KeyStoreExceptione){
e.printStackTrace();
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}catch(CertificateExceptione){
e.printStackTrace();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}catch(UnrecoverableKeyExceptione){
e.printStackTrace();
}catch(KeyManagementExceptione){
e.printStackTrace();
}

}
publicstaticvoidmain(String[]args){
newServer();
}
{
privateSocketsocket;
publicReceiveSocket(Socketsocket){
this.socket=socket;
}
;
;
@Override
publicvoidrun(){
try{
reader=newObjectInputStream(newBufferedInputStream(socket.getInputStream()));
//writer=newObjectOutputStream(socket.getOutputStream());
//开启无限循环监控消息

//java.io.EOFException
Objectobj=reader.readUTF();
SocketAddressaddress=socket.getRemoteSocketAddress();
System.out.println(address.toString()+"> "+obj);
//Objectobj=reader.readObject();
//if(obj!=null)
//{
//Useruser=(User)obj;
//System.out.println("id=="+user.getPassword()+" name=="+user.getName());
//}
//while(true){}
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(null!=reader){
try{
reader.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
if(null!=writer){
try{
reader.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
try{
socket.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
}


第三步 Android端代码


主要是发送数据的代码

protectedVoiddoInBackground(Void...params){
Log.i(TAG,"doInBackground");
try{
SSLContextcontext;
KeyStorets=KeyStore.getInstance("BKS");
ts.load(getResources().openRawResource(R.raw.test),
"1qaz2wsx".toCharArray());
TrustManagerFactorytmf=TrustManagerFactory
.getInstance("X509");
tmf.init(ts);
TrustManager[]tm=tmf.getTrustManagers();
context=SSLContext.getInstance("SSL");
context.init(null,tm,null);
SocketFactoryfactory=context.getSocketFactory();
SSLSocketsocket=(SSLSocket)factory.createSocket(
"192.168.70.249",10000);
ObjectOutputStreamout=newObjectOutputStream(
socket.getOutputStream());
out.writeUTF(UUID.randomUUID().toString());
out.flush();
System.out.println("========客户端发送成功=========");
;
socket.close();
}catch(Exceptionex){
ex.printStackTrace();
}
returnnull;
}


以上是主要流程代码,可以根据自身需要适当进行修改

㈦ android开发要哪些jar

am.jar:终端下执行am命令时所需的java库。源码目录:framework/base/cmds/am
android.policy.jar:锁屏界面需要用到的jar包,该包引用了android.test.runner.jar,源码目录:framework/base/policy
android.test.runner.jar:测试应用所需的jar包,该包引用了core.jar,core-junit.ajr以及framework.jar,源码目录:framework/base/test-runner
bmgr.jar:adb shell命令下对Android Device所有package备份和恢复的操作时所需的java库。 不过这个android服务默认是Disabled,而且要backup的应用必须实现BackupAgent,在AndroidManifest.xml的application标签中加入android:backupAgent属性。源码目录:framework/base/cmds/bmgr
bouncycastle.jar: java三方的密匙库,网上资料说用来apk签名、https链接之类,官网 :http://www.bouncycastle.org/java.html
com.android.future.usb.accessory.jar:用于管理USB的上层java库,在系统编译时hardware层会调用到。源码目录:frameworks/base/libs/usb
com.android.location.provider.jar:
com.android.nfc_extras.jar:NFC外部库。android/nfc/NfcAdapter.java会调用到包中的NfcAdapterExtras.java。源码目录:frameworks/base/nfc-extras
core-junit.jar :junit核心库,在运行*Test.apk时被调用。
core-junitrunner.jar:未知,公司话机上有。
core-tests*.jar:framework下的一系列测试jar包,不做测试时可删除。
core.jar:核心库,启动桌面时首先加载这个。源码目录:
ext.jar:android外部三方扩展包,源码主要是external/nist-sip(java下的sip三方库)、external/apache-http(apache的java三方库)、external/tagsoup(符合SAX标准的HTML解析器)。其实这个jar包可以添加外部扩展jar包,只需在framework/base/Android.mk中的ext-dir添加src目录即可。
framework-res.apk:android系统资源库。
framework.jar:android的sdk中核心代码。
ime.jar:ime命令所需jar包,用于查看当前话机输入法列表、设置输入法。源码目录:framework/base/cmds/ime
input.jar:input命令所需的jar包,用于模拟按键输入。源码目录:framework/baes/cmds/input
javax.obex.jar:java蓝牙API,用于对象交换协议。源码目录:framework/base/obex
monkey.jar:执行monkey命令所需jar包。源码目录:framework/base/cmds/monkey
pm.jar:执行pm命令所需的jar包,pm详情见adb shell pm,源码目录:framework/base/cmds/pm
services.jar:话机框架层服务端的编译后jar包,配合libandroid_servers.so在话机启动时通过SystemServer以循环闭合管理的方式将各个service添加到ServiceManager中。源码目录:framework/base/service
sqlite-jdbc.jar: sqlite的Java DataBase Connextivity jar包。
svc.jar:svc命令所需jar包,可硬用来管理wifi,power和data。源码目录:framework/base/cmds/svc

阅读全文

与bouncycastleandroid相关的资料

热点内容
复盛制冷压缩机 浏览:979
云服务器共享手机流量 浏览:833
星界边境像素压缩 浏览:454
算法分析与设计二手 浏览:981
学编程如何配电脑 浏览:968
怎么看特征找卡密的加密方式 浏览:524
方舟非官方服务器怎么赚钱 浏览:514
明日之后服务器无效是怎么回事 浏览:270
蛋壳公寓app如何查水电表 浏览:718
ad20库中的51单片机怎么找 浏览:624
阿里云服务器有点卡吗 浏览:215
苹果7如何让app后台运行 浏览:170
耐克app预售产品哪里看 浏览:209
补全算法一年级 浏览:131
evd数据调校软件加密 浏览:442
app听课与微信如何设置分屏 浏览:911
加密的excel怎么撤销 浏览:43
java动态数组初始化 浏览:978
编译后程序块过大不适合 浏览:675
李煜pdf 浏览:848