- 浏览: 543342 次
- 性别:
- 来自: 湖南娄底
文章分类
- 全部博客 (252)
- C#资料 (0)
- java资料 (22)
- 数据库资料 (0)
- Java :开发中遇到的问题 (4)
- 书写属于我的人生 (6)
- spring (6)
- hibernate (16)
- struts (17)
- SSH (5)
- Linux操作系统 (1)
- Ext (5)
- Jquery (9)
- Tomcat部署出错 (2)
- xml (5)
- JSON (5)
- javascript 专题 (5)
- 开发环境配置 (2)
- web 开发 (27)
- Eclipse (7)
- Integration (1)
- 解决方案搜罗 (7)
- 网站收藏 (8)
- 测试框架 (1)
- iframe 专题 (6)
- JSTL (2)
- 各种插件收集 (2)
- 权限设计模型探讨 (1)
- DWR (1)
- log4j (3)
- java (11)
- java 格式化 (1)
- 软件工程 (2)
- 乱码专题 (1)
- UML (4)
- java 设计模式 篇 (1)
- 用法收集 (0)
- sourceforge apache solutions (2)
- Struts2 + JPA + Spring 开发 (1)
- 自定义工具箱 (0)
- IDE (4)
- opencms (1)
- jeecms (1)
- ant (0)
- maven (2)
- 数据库连接池 (0)
- spring MVC (0)
- android (1)
- web-server (1)
- iphone-开发环境 (1)
- iphone-软件开发 (6)
- iPhone-软件设计 (1)
- iphone-应用 (3)
- iPhone-设置 (2)
- iphone-软件开发-设计模式篇 (0)
- iphone-软件开发-OC基础 (9)
- iphone-软件开发- UI篇 (9)
- iphone-软件开发-工具类篇 (1)
- iphone-软件开发-第三方篇 (0)
- iphone-软件开发-特效篇 (2)
- iphone-软件开发-动画篇 (1)
- oracle (1)
- Java-Security (0)
- Three20 UI (1)
- IOS-HOW-TO-专题 (1)
- Mark-Develope Issues (1)
- iphone-软件开发- 资料参考篇 (1)
- C 语言-基本语法 (0)
- Java Servlet (2)
- Eclipse optimization (1)
- IOS Basic (0)
- ecl (0)
- FRONT-HTML (0)
- FRONT-JS (0)
- PHP (0)
最新评论
-
qq_29862421:
[[color=brown]color=yellow][url ...
java 上传图片同时获得图片的宽和高 -
hhb19900618:
NSString <==> NSNumber 之前 ...
OC 常用数据类型之间的转换 -
baohuan_love:
果然能解决问题,感谢分享
Tomcat Error Page配置 与 Error Page在IE下不能转发的问题 -
唐丽梅6313:
很细致。。
键盘样式风格有关设置-iOS开发 -
olived:
哥哥,为什么我的没有破解成功,总是提示许可文件丢失!!QQ:3 ...
[软件测试解决方案] soapUI 4.0.1破解方法
15.2.3 利用SATSA高级API进行加解密
除了SATSA定义的两个可选包可用于连接加密硬件外,还有两个包能够实现如今的许多移动应用程序所需的常见加密操作。SATSA-CRYPTO包 包含java.security包、java.security.spec包、javax.crypto包以及javax.crypto.spec包的一 个子集,提供了用于公私钥管理、消息摘要、签名验证以及数字加密的API。SATSA-PKI安全包包含javax.microedition.pki和 javax.microedition. securityservice,定义了支持基本用户证书管理的类。
使用SATSA-CRYPTO API,让我们看一下两个常见操作,在应用程序开发期间可能会用到它们。这两个操作是:创建消息摘要和加密(或解密)消息。
1. 使用SATSA-CRYPTO API创建消息摘要
移动应用程序可能需要执行的最常见的密码操作就是创建消息摘要。如今,许多Web服务API使用消息摘要作为一种阻止篡改Web服务请求或响应的有 效负荷(payload)的方式;消息摘要可以是HTTP的头部或Web服务的参数,也可以简单地附加到Web服务头部之后。这就像使用SATSA- CRYPTO API一样简单,如代码清单15-3所示。
代码清单15-3 创建消息摘要
SATSA-CRYPTO API提供了MessageDigest类,该类提供了一个用于创建消息摘要算法实现的静态工厂,以及一个该消息摘要算法的一个接口。通过调用 MessageDigest的getInstance函数并传入想要其实现的摘要函数("MD5"或"SHA-1")的名称,可以获得 MessageDigest的一个具体实例。生成的MessageDigest对象调用其update方法来使用你传给它的字节数组,当调用该对象的 digest方法时,它将提供生成的消息摘要并重置算法。
这段代码假设你拥有一个Web请求,并且想在webRequest中为该请求生成一个MD5摘要。由于MessageDigest接口处理字节数 组,所以这段代码首先获取Web请求的字节数组表现形式,然后声明变量来包含生成的摘要。完成之后,将生成MD5 MessageDigest实现的一个实例,并调用md.update,将组成webRequest的字节传递给它。对于较长的文档,可以多次调用 md.update。当使用update将消息提供给MessageDigest实例之后,代码将要求该实例使用digest方法计算摘要,这会使用一个 字节数组来存储输出和数组中的字节数。
SATSA-CRYPTO提供的MessageDigest实现通常包括MD5和SHA-1算法,但是无法保证每种算法都可用。因此,应用程序应该准备好处理NoSuchAlgorithmExecption。
也可以使用SATSA-CRYPTO API来验证消息摘要,创建源文档的一个消息摘要并将其与提供的消息摘要进行比较。没有用于比较消息摘要的API;可以对每个摘要中的字节进行循环,并逐字节进行比较,以确定每个消息摘要是否相等。
2. 使用SATSA-CRYPTO API加密和解密
在大多数环境下,只有在将数据从设备发送出并在网络上传输时才对其进行加密。在这种情况下,HTTPS通常就能满足数据安全需求了;有时还需要以一 种加密格式在将数据存储在本地,或者使用除HTTPS之外的协议交换数据。SATSA-CRYPTO API提供了用于加密和解密数据的接口,但带有一个局限性:尽管可以,采用公钥(也称为对称)密码算法加密使用SATSA-CRYPTO API的数据,但是无法解密使用公钥密码算法加密的数据。
最好将密码的SATSA-CRYPTO API想作一个接口,而不是一个具体实现。对于给定的目标,无法确切地知道将会遇到哪种密码实现;一种设备可能支持DES(Data Encryption Standard,数据加密标准)、RC4(Rivest Cipher 4)以及AES(Advanced Encryption Standard,高级加密标准),而另一种设备可能仅支持DES。无论支持哪种实现,使用SATSA-CRYPTO密码接口的一般方法都是一样的。
(1) 以字节数组的形式生成想要加密的明文。
(2) 同样以字节数组的形式生成要用于加密明文的密钥。
(3) 生成期望的密码实现的一个实例,这将是java.security.Cipher的一个实例。
(4) 初始化密码。
(5) 使用Cipher's update方法逐步加密明文,或者使用Cipher's doFinal方法通过一步操作执行加密。
你可能已经预料到,解密是加密的逆过程;指定密码实现并指明应该在解密模式下使用它,而无须像步骤3中那样指定一个密码实现。传递加密的文本,而不是传递步骤5中的明文。考虑代码清单15-4,其中演示了加密消息的过程。
代码清单15-4 加密消息
这段代码按照上面列出的每步算法编写;尤其注意,当初始化Cipher实例时,使用ENCRYPT_MODE作为选定模式。解密将是加密的逆过程, 解密算法的代码只需将相应参数的DECRYPT_MODE传递给init。运行此代码之后,如果没有异常,字节数组cipherTextBytes将包含 加密的文本。
各种密码算法在处理输入的方式上可能不尽相同;一些算法(比如DES)是块密码,它要求以大小均匀的块的形式提供输入,比如64字节的块。当使用块 密码时,必须将输入填充为与块的边界一致;更复杂的是,一些块密码还是非对称的,也就是说输入块的大小与输出块的大小不同。其他密码算法(比如RC4)都 是流密码:它们获取一个字节流(明文或加密的文本),然后进行加密或解密。当使用块密码时,一定要确保将所有块都传递给了update和doFinal方 法。
当使用Cipher接口加密或解密时,可能会发生一些事情;针对各种事情,API会分别抛出以下异常。
当输入未被正确填充或块的大小错误时,API为块密码抛出BadPaddingException或Illegal- BlockSizeException。
当密码算法使用了一个无效的密钥时,API抛出InvalidKeyException。
当你尝试在初始化消息之前,使用密码算法对其加密或解密时,API抛出Illegal- StateException。
如果你试图获取一个不受支持的算法的Cipher实例,API将抛出NoSuchAlgorithmException。
注意 在真实世界中,你不应该随便将密码算法的私钥嵌入到源代码或其他易于读取的资源中,比如JAR文件的组成部分。恶意用户可能通过反编译应用程序或JAR找 到密钥。相反,应该在分发时创建密钥,每个应用程序使用不同的密钥,并且仅适用安全的HTTP分发应用程序JAD。但是,这将意味着应用程序不能由 Java Verified Program的参与者进行签名和验证。也可以提供一个Web服务来安全地生成密钥,并通过HTTPS传递给你的应用程序。
原文地址:http://book.51cto.com/art/200908/145122.htm[转载]
发表评论
-
IO与文件读写---使用Apache commons IO操纵底层读写
2012-10-18 09:59 0【一】Apache commons IO包之IOUtils ... -
Java中使用Runtime和Process类运行外部程序
2012-05-10 19:07 0http://www.cnblogs.com/xxpal/ar ... -
AVA环境变量设置图文教程
2012-04-12 21:39 13051、在【我的电脑】上按右键,选择【属性】 2、选 ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-04-06 23:23 0最近的机器内存又爆 ... -
Java 理论与实践: 正确使用 Volatile 变量
2012-03-04 11:38 796Java 语言中的 volatile 变量可以被看作是一种 “ ... -
java获得实例对象的几种方法
2012-03-04 10:29 1033// 1.new Dog d1 = new Dog() ... -
文件读写锁
2012-03-04 09:42 0一个读写锁支持多个线程同时访问一个对象,但是在同一时刻只有一个 ... -
使用Bouncy Castle API加密和解密
2012-02-13 17:50 750515.3.2 使用Bouncy Castle API加密和解密 ... -
使用Bouncy Castle API创建消息摘要
2012-02-13 17:48 136315.3.1 使用Bouncy Castle API创建消息摘 ... -
java 加密技术总结
2012-02-13 15:46 963Important Notes In order to ... -
通过反射机制获取位于同一个包下的接口的所有实现类
2012-01-15 00:43 7154public class ClassUtils { ... -
java 反射机制--Phase 1
2012-01-15 00:40 0如何通过反射来获得当前实例的所有成员方法,成员变量,构造函数? ... -
Java数字证书
2012-01-09 20:42 967生成密钥库的参数说明: CN(Common Name名 ... -
JVM系统相关
2011-12-18 10:41 1073JVM系统属性(System.getProperty())和环 ... -
java 的继承机制
2011-10-30 10:51 4291.interface 和 interface之间 java接 ...
相关推荐
- **移动支付应用**:利用SATSA API实现端到端的加密通信,保护用户的金融信息不被窃取。 - **企业级应用**:通过实施严格的认证机制和数据加密标准,确保敏感的企业数据不被未授权访问。 6. **兼容性与性能**: ...
在J2ME环境中,开发者可以利用Java Card API来实现这些功能,该API提供了与智能卡交互的类和接口,如`javacard.framework.APDU`类用于处理APDU命令,`javacard.security`包中的类用于加密和签名操作。 了解并熟练...
在Java卡上,可以利用Java Card GlobalPlatform API来实现安全管理功能。GlobalPlatform是一个开放标准,定义了如何在智能卡上管理和执行安全应用。它提供了安全存储和执行环境,支持数字证书的申请、签名和验证操作...
以上介绍了 BlackBerry 系统的一些核心属性,对于开发者来说了解这些属性有助于更好地利用 BlackBerry 平台的功能进行应用程序开发。接下来的部分将继续介绍其他系统的属性类别,包括 PDAP、LAPI、SATSA、CHAPI、I18...
代理将从 apdutool(来自 Java Card 开发工具包)接收到的 APDU 命令发送到智能卡,并将 APDU 响应从智能卡发送回 apdutool。 允许使用来自 WTK(无线工具包)的 SATSA 智能卡。