当前位置: 编程技术>移动开发
本页文章导读:
▪应用Java实现CA 使用Java实现CA
一. 准备1. JDK 1.62. 安装 BouncyCaslte 包,把jar放入ext文件夹,并在 java.security 加入 BouncyCaslte 包的 Provider3. 概念通俗解释 Key:密钥、公钥、私钥都称为key,key有大小.........
▪ intent跟Pendingintent 的区别 intent和Pendingintent 的区别
ntent英文意思是意图,pending表示即将发生或来临的事情。 PendingIntent这个类用于处理即将发生的事情。比如在通知Notification中用于跳转页面,但不是马上跳转。 Intent .........
▪ 让ListView 滚动下床 让ListView 滚动起来
翻页/滚动加载1.滚动加载listView.setOnScrollListener(new OnScrollListener() {
//添加滚动条滚到最底部,加载余下的元素
@Override
public void onScrollStateChanged(AbsListView view, i.........
[1]应用Java实现CA
来源: 互联网 发布时间: 2014-02-18
使用Java实现CA
一. 准备
1. JDK 1.6
2. 安装 BouncyCaslte 包,把jar放入ext文件夹,并在 java.security 加入 BouncyCaslte 包的 Provider
3. 概念通俗解释
Key:密钥、公钥、私钥都称为key,key有大小,比如1024bit、256bit等。
安全对象:目前有key pair--即公私钥对;key--包括密钥和单独的公钥、私钥;证书(CRT)--包括X.509 v1、X.509 v2(用于CRL,即证书撤销列表)、X.509 v3。
加密:包括对称加密和非对称加密(公私钥加密)。
对称加密:RC4、Blowfish、DES、3DES等等,一般使用key来做密钥,常用一个密码字符串来生成key,可以理解为key的代表。
非对称加密:RSA、DSA等等,也称为公私钥对加密,用公钥加密的只能用私钥解密,用私钥加密的只能用公钥解密。
消息摘要:作用是验证内容的正确性,比如MD5、SHA1、SHA256等,是对任何输入的数据都生成一定位数的值(128bit、256bit等等),是不可逆运算,并且保证1.只要输入有差异,得到的值就不同;2.输入一致就得到相同的值。
签名和验证:对内容做消息摘要后用私钥加密后的数据即签名,验证签名就是解密后得到消息摘要然后和内容计算出的消息摘要比对,符合就说明内容完整且来源明确。
公私钥对:非对称加密的公私钥对。
数字证书--解释1:公钥+信息(表明此公钥是谁的信息,有固定格式,可以扩展),然后用CA的私钥对它做签名。有些信息只有 X.509 V3版本才能填写,因为有相对V1新增的扩展域。
数字证书--解释2:是将用户(或其他实体)身份与公钥绑定的信息载体。一个合法的数字证书不仅要符合 X509 格式规范,还必须有 CA 的签名。用户不仅有自己的数字证书,还必须有对应的私钥。X509v3 数字证书主要包含的内容有:证书版本、证书序列号、签名算法、颁发者信息、有效时间、持有者信息、公钥信息、颁发者 ID、持有者 ID 和扩展项。
CA证书:用自己的私钥签名自己的公钥+自己的身份信息,生成自签名的CA证书
CA私钥:和CA证书里的公钥匹配的私钥
二. 编码
1. 编码的目的:为了把结构复杂的安全对象(如公钥、私钥、证书等)变成字节流以便存储和传递。
2. 编码和文件格式
DER
辨别编码规则(DER),可包含所有私钥、公钥和证书。它是大多数浏览器的缺省格式,并按 ASN.1 DER 格式存储,是无报头的,可以存为二进制或Base64编码。PEM 是用文本报头包围的 DER。
PEM
Openssl使用 PEM(Privacy Enhanced Mail)格式来存放各种信息,它是openssl 默认采用的信息存放方式。Openssl 中的 PEM 文件一般包含如下信息:
1. 内容类型:表明本文件存放的是什么信息内容,它的形式为“——BEGIN XXXX——”,与结尾的“——END XXXX——”对应。
2. 头信息:表明数据是如何被处理后存放,openssl 中用的最多的是加密信息,比如加密算法以及初始化向量 iv。
3. 信息体:为 BASE64 编码的数据。可以包括所有私钥(RSA 和 DSA)、公钥(RSA 和 DSA)、证书请求和 (x509) 证书。它存储用 Base64 编码的 DER 格式数据,用 ASCII 报头包围,因此适合系统之间的文本模式传输。
PFX 或 P12
公钥加密标准 #12 (PKCS#12) 可包含所有私钥、公钥和证书。其以二进制格式存储,也称为 PFX 文件,通常以p12为扩展名,Windows下可以直接运行导入到IE浏览器,一般用来导入私钥。
CER
一般指使用DER格式的证书。不过现在以cer为扩展名的文件都是PEM格式的证书文件,并且Windows下能直接导入。
KEY
一般指PEM格式的私钥文件。
JKS
Java使用的安全对象保存格式,一般称呼为密钥库,和p12一样,都能包含所有私钥、公钥和证书,只是格式不同。不过p12整个密钥库和私钥用相同密码进行保护,而JKS可以用不同密码,一般建议相同,这样和p12互相转换就比较方便了。JKS、DER、p12和PEM都是密钥库,各有特色,一般交换时都用p12和pem。
3. Windows下常用格式
Windows的IE的证书导出向导有常用的支持格式,可以导出二进制DER格式或Base64编码的证书;PEM格式的证书就是有报头的Base64编码的DER证书,一般使用cer扩展名;有私钥一般用p12。
三. 各步骤描述
1. 生成CA步骤
1) 生成一个公私钥对
2) 用私钥对身份信息和公钥签名,即生成 CA证书,同时私钥就是 CA私钥了
2. 签发证书步骤1
1) 生成一个公私钥对
2) 用CA的私钥对身份信息和公钥签名,即生成了此CA签发的证书了
3. 签发证书步骤2
1) 生成一个公私钥对
2) 用私钥对身份信息和公钥签名后生成证书请求文件(CSR),一般使用 PKCS#10 格式保存CSR
3) 提取CSR里的公钥和信息,用CA的私钥签名,即生成了此CA签发的证书了
一. 准备
1. JDK 1.6
2. 安装 BouncyCaslte 包,把jar放入ext文件夹,并在 java.security 加入 BouncyCaslte 包的 Provider
3. 概念通俗解释
Key:密钥、公钥、私钥都称为key,key有大小,比如1024bit、256bit等。
安全对象:目前有key pair--即公私钥对;key--包括密钥和单独的公钥、私钥;证书(CRT)--包括X.509 v1、X.509 v2(用于CRL,即证书撤销列表)、X.509 v3。
加密:包括对称加密和非对称加密(公私钥加密)。
对称加密:RC4、Blowfish、DES、3DES等等,一般使用key来做密钥,常用一个密码字符串来生成key,可以理解为key的代表。
非对称加密:RSA、DSA等等,也称为公私钥对加密,用公钥加密的只能用私钥解密,用私钥加密的只能用公钥解密。
消息摘要:作用是验证内容的正确性,比如MD5、SHA1、SHA256等,是对任何输入的数据都生成一定位数的值(128bit、256bit等等),是不可逆运算,并且保证1.只要输入有差异,得到的值就不同;2.输入一致就得到相同的值。
签名和验证:对内容做消息摘要后用私钥加密后的数据即签名,验证签名就是解密后得到消息摘要然后和内容计算出的消息摘要比对,符合就说明内容完整且来源明确。
公私钥对:非对称加密的公私钥对。
数字证书--解释1:公钥+信息(表明此公钥是谁的信息,有固定格式,可以扩展),然后用CA的私钥对它做签名。有些信息只有 X.509 V3版本才能填写,因为有相对V1新增的扩展域。
数字证书--解释2:是将用户(或其他实体)身份与公钥绑定的信息载体。一个合法的数字证书不仅要符合 X509 格式规范,还必须有 CA 的签名。用户不仅有自己的数字证书,还必须有对应的私钥。X509v3 数字证书主要包含的内容有:证书版本、证书序列号、签名算法、颁发者信息、有效时间、持有者信息、公钥信息、颁发者 ID、持有者 ID 和扩展项。
CA证书:用自己的私钥签名自己的公钥+自己的身份信息,生成自签名的CA证书
CA私钥:和CA证书里的公钥匹配的私钥
二. 编码
1. 编码的目的:为了把结构复杂的安全对象(如公钥、私钥、证书等)变成字节流以便存储和传递。
2. 编码和文件格式
DER
辨别编码规则(DER),可包含所有私钥、公钥和证书。它是大多数浏览器的缺省格式,并按 ASN.1 DER 格式存储,是无报头的,可以存为二进制或Base64编码。PEM 是用文本报头包围的 DER。
PEM
Openssl使用 PEM(Privacy Enhanced Mail)格式来存放各种信息,它是openssl 默认采用的信息存放方式。Openssl 中的 PEM 文件一般包含如下信息:
1. 内容类型:表明本文件存放的是什么信息内容,它的形式为“——BEGIN XXXX——”,与结尾的“——END XXXX——”对应。
2. 头信息:表明数据是如何被处理后存放,openssl 中用的最多的是加密信息,比如加密算法以及初始化向量 iv。
3. 信息体:为 BASE64 编码的数据。可以包括所有私钥(RSA 和 DSA)、公钥(RSA 和 DSA)、证书请求和 (x509) 证书。它存储用 Base64 编码的 DER 格式数据,用 ASCII 报头包围,因此适合系统之间的文本模式传输。
PFX 或 P12
公钥加密标准 #12 (PKCS#12) 可包含所有私钥、公钥和证书。其以二进制格式存储,也称为 PFX 文件,通常以p12为扩展名,Windows下可以直接运行导入到IE浏览器,一般用来导入私钥。
CER
一般指使用DER格式的证书。不过现在以cer为扩展名的文件都是PEM格式的证书文件,并且Windows下能直接导入。
KEY
一般指PEM格式的私钥文件。
JKS
Java使用的安全对象保存格式,一般称呼为密钥库,和p12一样,都能包含所有私钥、公钥和证书,只是格式不同。不过p12整个密钥库和私钥用相同密码进行保护,而JKS可以用不同密码,一般建议相同,这样和p12互相转换就比较方便了。JKS、DER、p12和PEM都是密钥库,各有特色,一般交换时都用p12和pem。
3. Windows下常用格式
Windows的IE的证书导出向导有常用的支持格式,可以导出二进制DER格式或Base64编码的证书;PEM格式的证书就是有报头的Base64编码的DER证书,一般使用cer扩展名;有私钥一般用p12。
三. 各步骤描述
1. 生成CA步骤
1) 生成一个公私钥对
2) 用私钥对身份信息和公钥签名,即生成 CA证书,同时私钥就是 CA私钥了
2. 签发证书步骤1
1) 生成一个公私钥对
2) 用CA的私钥对身份信息和公钥签名,即生成了此CA签发的证书了
3. 签发证书步骤2
1) 生成一个公私钥对
2) 用私钥对身份信息和公钥签名后生成证书请求文件(CSR),一般使用 PKCS#10 格式保存CSR
3) 提取CSR里的公钥和信息,用CA的私钥签名,即生成了此CA签发的证书了
[2] intent跟Pendingintent 的区别
来源: 互联网 发布时间: 2014-02-18
intent和Pendingintent 的区别
ntent英文意思是意图,pending表示即将发生或来临的事情。
PendingIntent这个类用于处理即将发生的事情。比如在通知Notification中用于跳转页面,但不是马上跳转。
Intent 是及时启动,intent 随所在的activity 消失而消失。
PendingIntent 可以看作是对intent的包装,通常通过getActivity,getBroadcast ,getService来得到pendingintent的实例,当前activity并不能马上启动它所包含的intent,而是在外部执行 pendingintent时,调用intent的。正由于pendingintent中 保存有当前App的Context,使它赋予外部App一种能力,使得外部App可以如同当前App一样的执行pendingintent里的 Intent, 就算在执行时当前App已经不存在了,也能通过存在pendingintent里的Context照样执行Intent。另外还可以处理intent执行后的操作。常和alermanger 和notificationmanager一起使用。
Intent一般是用作Activity、Sercvice、BroadcastReceiver之间传递数据,而Pendingintent,一般用在 Notification上,可以理解为延迟执行的intent,PendingIntent是对Intent一个包装。
Java代码
private void showNotify(){
Notification notice=new Notification();
notice.icon=R.drawable.icon;
notice.tickerText="您有一条新的信息";
notice.defaults=Notification.DEFAULT_SOUND;
notice.when=10L;
// 100 毫秒延迟后,震动 250 毫秒,暂停 100 毫秒后,再震动 500 毫秒
//notice.vibrate = new long[] { 100, 250, 100, 500 };出错?
//notice.setLatestEventInfo(this, "通知", "开会啦", PendingIntent.getActivity(this, 0, null, 0));
notice.setLatestEventInfo(this, "通知", "开会啦", PendingIntent.getActivity(this, 0, new Intent(this,Activity2.class), 0));//即将跳转页面,还没跳转
NotificationManager manager=(NotificationManager)getSystemService(this.NOTIFICATION_SERVICE);
manager.notify(0,notice);
}
[java] view plaincopy
private void showNotify(){
Notification notice=new Notification();
notice.icon=R.drawable.icon;
notice.tickerText="您有一条新的信息";
notice.defaults=Notification.DEFAULT_SOUND;
notice.when=10L;
// 100 毫秒延迟后,震动 250 毫秒,暂停 100 毫秒后,再震动 500 毫秒
//notice.vibrate = new long[] { 100, 250, 100, 500 };出错?
//notice.setLatestEventInfo(this, "通知", "开会啦", PendingIntent.getActivity(this, 0, null, 0));
notice.setLatestEventInfo(this, "通知", "开会啦", PendingIntent.getActivity(this, 0, new Intent(this,Activity2.class), 0));//即将跳转页面,还没跳转
NotificationManager manager=(NotificationManager)getSystemService(this.NOTIFICATION_SERVICE);
manager.notify(0,notice);
}
1. GSM网络中android发送短信示例
Java代码
String msg ="你好,美女";
String number = "135****6784";
SmsManager sms = SmsManager.getDefault();
PendingIntent pi = PendingIntent.getBroadcast(SmsActivity.this,0,new Intent(...),0);
sms.sendTextMessage(number, null, msg, pi, null);
Toast.makeText(SmsActivity.this,"发送成功",Toast.LENGHT_LONG).show();
[java] view plaincopy
String msg ="你好,美女";
String number = "135****6784";
SmsManager sms = SmsManager.getDefault();
PendingIntent pi = PendingIntent.getBroadcast(SmsActivity.this,0,new Intent(...),0);
sms.sendTextMessage(number, null, msg, pi, null);
Toast.makeText(SmsActivity.this,"发送成功",Toast.LENGHT_LONG).show();
代码解释
PendingIntent就是一个Intent的描述,我们可以把这个描述交给别的程序,别的程序根据这个描述在后面的别的时间做你安排做的事情 (By giving a PendingIntent to another application, you are granting it the right to perform the operation you have specified as if the other application was yourself,就相当于PendingIntent代表了Intent)。本例中别的程序就是发送短信的程序,短信发送成功后要把intent广播出去 。
函数SmsManager.sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)中参数解释:
1)PendingIntent sentIntent:当短信发出时,成功的话sendIntent会把其内部的描述的intent广播出去,否则产生错误代码并通过android.app.PendingIntent.OnFinished进行回调,这个参数最好不为空,否则会存在资源浪费的潜在问题;
2)PendingIntent deliveryIntent:是当消息已经传递给收信人后所进行的PendingIntent广播。
查看PendingIntent 类可以看到许多的Send函数,就是PendingIntent在进行被赋予的相关的操作。[size=medium][/size]
ntent英文意思是意图,pending表示即将发生或来临的事情。
PendingIntent这个类用于处理即将发生的事情。比如在通知Notification中用于跳转页面,但不是马上跳转。
Intent 是及时启动,intent 随所在的activity 消失而消失。
PendingIntent 可以看作是对intent的包装,通常通过getActivity,getBroadcast ,getService来得到pendingintent的实例,当前activity并不能马上启动它所包含的intent,而是在外部执行 pendingintent时,调用intent的。正由于pendingintent中 保存有当前App的Context,使它赋予外部App一种能力,使得外部App可以如同当前App一样的执行pendingintent里的 Intent, 就算在执行时当前App已经不存在了,也能通过存在pendingintent里的Context照样执行Intent。另外还可以处理intent执行后的操作。常和alermanger 和notificationmanager一起使用。
Intent一般是用作Activity、Sercvice、BroadcastReceiver之间传递数据,而Pendingintent,一般用在 Notification上,可以理解为延迟执行的intent,PendingIntent是对Intent一个包装。
Java代码
private void showNotify(){
Notification notice=new Notification();
notice.icon=R.drawable.icon;
notice.tickerText="您有一条新的信息";
notice.defaults=Notification.DEFAULT_SOUND;
notice.when=10L;
// 100 毫秒延迟后,震动 250 毫秒,暂停 100 毫秒后,再震动 500 毫秒
//notice.vibrate = new long[] { 100, 250, 100, 500 };出错?
//notice.setLatestEventInfo(this, "通知", "开会啦", PendingIntent.getActivity(this, 0, null, 0));
notice.setLatestEventInfo(this, "通知", "开会啦", PendingIntent.getActivity(this, 0, new Intent(this,Activity2.class), 0));//即将跳转页面,还没跳转
NotificationManager manager=(NotificationManager)getSystemService(this.NOTIFICATION_SERVICE);
manager.notify(0,notice);
}
[java] view plaincopy
private void showNotify(){
Notification notice=new Notification();
notice.icon=R.drawable.icon;
notice.tickerText="您有一条新的信息";
notice.defaults=Notification.DEFAULT_SOUND;
notice.when=10L;
// 100 毫秒延迟后,震动 250 毫秒,暂停 100 毫秒后,再震动 500 毫秒
//notice.vibrate = new long[] { 100, 250, 100, 500 };出错?
//notice.setLatestEventInfo(this, "通知", "开会啦", PendingIntent.getActivity(this, 0, null, 0));
notice.setLatestEventInfo(this, "通知", "开会啦", PendingIntent.getActivity(this, 0, new Intent(this,Activity2.class), 0));//即将跳转页面,还没跳转
NotificationManager manager=(NotificationManager)getSystemService(this.NOTIFICATION_SERVICE);
manager.notify(0,notice);
}
1. GSM网络中android发送短信示例
Java代码
String msg ="你好,美女";
String number = "135****6784";
SmsManager sms = SmsManager.getDefault();
PendingIntent pi = PendingIntent.getBroadcast(SmsActivity.this,0,new Intent(...),0);
sms.sendTextMessage(number, null, msg, pi, null);
Toast.makeText(SmsActivity.this,"发送成功",Toast.LENGHT_LONG).show();
[java] view plaincopy
String msg ="你好,美女";
String number = "135****6784";
SmsManager sms = SmsManager.getDefault();
PendingIntent pi = PendingIntent.getBroadcast(SmsActivity.this,0,new Intent(...),0);
sms.sendTextMessage(number, null, msg, pi, null);
Toast.makeText(SmsActivity.this,"发送成功",Toast.LENGHT_LONG).show();
代码解释
PendingIntent就是一个Intent的描述,我们可以把这个描述交给别的程序,别的程序根据这个描述在后面的别的时间做你安排做的事情 (By giving a PendingIntent to another application, you are granting it the right to perform the operation you have specified as if the other application was yourself,就相当于PendingIntent代表了Intent)。本例中别的程序就是发送短信的程序,短信发送成功后要把intent广播出去 。
函数SmsManager.sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)中参数解释:
1)PendingIntent sentIntent:当短信发出时,成功的话sendIntent会把其内部的描述的intent广播出去,否则产生错误代码并通过android.app.PendingIntent.OnFinished进行回调,这个参数最好不为空,否则会存在资源浪费的潜在问题;
2)PendingIntent deliveryIntent:是当消息已经传递给收信人后所进行的PendingIntent广播。
查看PendingIntent 类可以看到许多的Send函数,就是PendingIntent在进行被赋予的相关的操作。[size=medium][/size]
[3] 让ListView 滚动下床
来源: 互联网 发布时间: 2014-02-18
让ListView 滚动起来
翻页/滚动加载
1.滚动加载
2.滚动翻页
注:在listView最下面可以试用listView.addFooterView(footerView, null, true);来显示“加载中...”等的字样来美化用户体验,在loadRemnantListItem()方法中动态控制“加载中...”的显示和不显示
翻页/滚动加载
1.滚动加载
listView.setOnScrollListener(new OnScrollListener() { //添加滚动条滚到最底部,加载余下的元素 @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { loadRemnantListItem(); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {} }); listView.setOnItemSelectedListener(new OnItemSelectedListener() { //按键选择List中的item,焦点落在最下面的view上加载余下的item @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { if(footerView == view) { loadRemnantListItem(); listView.setSelection(position - 1); } } @Override public void onNothingSelected(AdapterView<?> parent) {} }); private void loadRemnantListItem() {//滚到加载余下的数据 //动态的改变listAdapter.getCount()的返回值 //使用Handler调用listAdapter.notifyDataSetChanged();更新数据 }
2.滚动翻页
listView监听器代码相同 private void loadRemnantListItem() {//滚到加载余下的数据 //重新listView.setAdapter(newsAdapter); //使用Handler调用listAdapter.notifyDataSetChanged();更新数据 }
注:在listView最下面可以试用listView.addFooterView(footerView, null, true);来显示“加载中...”等的字样来美化用户体验,在loadRemnantListItem()方法中动态控制“加载中...”的显示和不显示
最新技术文章: