﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-amp@java-随笔分类-Java ME</title><link>http://www.blogjava.net/amplifier/category/8951.html</link><description>amplifier's java blog
&lt;br&gt;
&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5575070670019942";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;</description><language>zh-cn</language><lastBuildDate>Fri, 01 Feb 2008 12:16:56 GMT</lastBuildDate><pubDate>Fri, 01 Feb 2008 12:16:56 GMT</pubDate><ttl>60</ttl><item><title>郁闷的MIDP签名</title><link>http://www.blogjava.net/amplifier/archive/2008/02/01/178886.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Fri, 01 Feb 2008 10:41:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2008/02/01/178886.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/178886.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2008/02/01/178886.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/178886.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/178886.html</trackback:ping><description><![CDATA[通过JavaME的WMA可选包发送短信时，手机会提示是否允许程序发送该短信，虽然不太影响应用，但每次都要按一下允许也很不爽。从网上看到有人说对jar包签名后就不会出现这种情况了，但是签名的证书要向两个大公司买，因为手机里面一般只内置了那两个大公司的根证书，而且手机不允许安装新的根证书，这不分明是圈钱吗？不知道当初制定这个标准的家伙收了那两个公司多少黑钱！虽然这样会使很多病毒不能运行，但是那两个公司又不是上帝，给钱就可以买到证书了，他们又没什么力量也不会去研究购买证书的人要干什么，如果有恶意的人只要花点钱，同样可以造出带签名的病毒来。<br />
但是办法总是有的，有人另辟蹊径，通过非常手段给手机安装一个自己制作的根证书。详细过程可以看这里：<a href="http://browndrf.blogspot.com/" target="_blank">http://browndrf.blogspot.com/</a>，原理就是利用了NOKIA某些型号的手机可以通过web下载证书并安装的漏洞。我实验了一下，整个过程其实不用那么复杂，不需要用到NOKIA的签名工具，直接用SUN WTK的签名工具就可以了，也不需要通过网络安装程序，跟平时安装没签名的程序一样。<br />
然而，签了名的程序同样需要确认才能发送短信！而且比没签名的程序更麻烦，还要在MIDLet-Permissions里面填上一大堆许可，不签名的软件这个项根本不用填。唯一的好处是安装的时候不会提示程序不受信任，而且不能用无签名的同名程序覆盖。但是这种安装过程的问题并不需要多大关注，因为安装只是很少的时间，关键是使用。<br />
后来在这里：<a href="http://blog.csdn.net/zhengyun_ustc/archive/2006/04/07/654226.aspx" target="_blank">http://blog.csdn.net/zhengyun_ustc/archive/2006/04/07/654226.aspx</a>又发现一篇文章，说明能够安装根证书的不过是个别机型的漏洞，是不符合MIDP 2.0安全标准的，算了，这个问题还是没法解决，死心！<br />
JavaME真的有点像鸡肋，它最大的优点是跨平台，但各种手机的支持程度又各不相同，一点点小的差异就搞得人晕头转向。而且各种各样的限制使得它最多就弄点小游戏玩玩，要连接网络还得一堆的许可，程序大了还容易莫名其妙地崩溃。真是食之无味，弃之可惜。<br />
可是，我还是要搞&#8230;&#8230;
<img src ="http://www.blogjava.net/amplifier/aggbug/178886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2008-02-01 18:41 <a href="http://www.blogjava.net/amplifier/archive/2008/02/01/178886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>可用在JavaME上的加密包Bouncy Castle的使用</title><link>http://www.blogjava.net/amplifier/archive/2008/01/25/177838.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Fri, 25 Jan 2008 11:59:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2008/01/25/177838.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/177838.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2008/01/25/177838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/177838.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/177838.html</trackback:ping><description><![CDATA[<span lang="EN-US">Bouncy Castle（<a href="http://www.bouncycastle.org/" target="_blank">http://www.bouncycastle.org/</a>）是一个庞大的加密类库，支持Java和C#，其中Java部分发布的源代码压缩包就有24M左右，支持JDK 1.0~5.0，支持J2ME（现在叫JavaME）。<br />
但是，这个类库使用起来并不那么方便，它并没有与普通Java类库那样以Jar形式发布立即可用的二进制类库，而只发布源代码，源代码包含了多份，包括JDK1.0,JDK1.1,JDK1.2,JDK1.3,JDK1.4,JDK1.5,J2ME等，每种环境都有少量文件不一样，有多个用于Ant的build xml，分别用于各种不同的JDK，但是每个xml定义了多个target，不知道哪个target才能build出可用的类库来，选中了其中某个target有可能会出现错误，build不下去。文档太简单，基本没讲到怎么生成可用的类库，网上的相关文档也很少。我尝试了两天才终于把第一个MIDP加密测试程序运行成功。<br />
我的应用只是实现Java ME的加密，所以这里讲的只是针对JavaME的，JavaSE应该会简单一点。<br />
<br />
打开下载下来的压缩包（crypto-138.zip），会发现里面有一堆文件夹和一堆文件，其中一个文件夹叫j2me，于是第一反应就是打开它看看里面是什么，发现里面只有少量的源代码文件，看来这只是适用于j2me的一部分源代码而已，其他通用的部分不在这里。<br />
还有一个j2me.xml，是一个Ant的build文件，在eclipse里面用ant打开以后，发现里面有很多target，除了what（输出一些信息）和init（建立几个目录，复制一些文件）这两个能执行成功之外，其他几乎都是失败的，所以通过这个东西是搞不出我们可用的classes来的。<br />
没办法，只有一个个目录地看，在一个zips目录里面发现cldc_sources.zip，里面的源代码文件有很多，有点像了，于是就把它解压后放到一个Eclipse ME测试项目的src目录下，找到org.bouncycastle.crypto.examples包，里面有个MIDPTest.java文件，还有个midp_test.jad，看来这个是用来测试用的MIDP了，调出WTK的模拟器来运行一下，果然是，成功了。<br />
下一步是在手机上运行。如果不混淆，生成的JAR包有1.6M之巨，不管了，先试一下。安装到手机上，到最后出现&#8220;授权失败&#8221;的提示，安装不成功。记起原来找文档时在index.html里面看到有这么一句话：The final caveat to this is that as the j2me distribution includes some compatibility classes starting in the java package, you need to use an obfuscator to change the package names before attempting to import a midlet using the BC API. 似乎因为用于j2me的版本有几个以java开头的包，里面包含了一些兼容类，可能是用于补充CLDC的不足，由于java开头的包是系统包，是不允许修改的，所以不处理过的话安装会失败。必须先用混淆器弄一下才行。Eclipse ME配置混淆器十分简单，我使用的是ProGuard。参照<a href="http://www.cnjm.net/eclipseme/docs/configuring.html">http://www.cnjm.net/eclipseme/docs/configuring.html</a>配置即可。然后运行Create Obfuscated Package生成混淆过的包，只有13K。安装在Nokia 6681上，成功，运行，也成功了。尝试修改一下MIDPTest.java，在whichCipher方法里面，把返回值改为其他数字（0-4），就可以修改加密方式，但是由于DES加密使用的密钥长度为64bit，而默认的key是"0123456789abcdef0123456789abcdef"，运行DES是会提示密钥太长，我开始以为把key改为4个字符就可以（因为Java使用Unicode，每个字符2字节，4个字符8字节=64bit），却出现了数组越界的异常，其实这个key并不是直接用作密钥，还要经过处理的。尝试了8个字符也不行，最后发现16个字符就可以了，应该是每两个字符对应一个16进制数。测试程序是对&#8220;<a href="http://www.bouncycastle.org">www.bouncycastle.org</a>&#8221;这个字符串进行加密和解密，速度还是挺快的，几乎感觉不到需要时间（在手机上启动Java程序本来就比较慢）。<br />
<br />
中间还碰到一个问题，由于我是把源代码直接复制到一个原来建立好的MIDP项目里，那个MIDP项目里已经有个默认的JAD文件，但是里面没有表示要运行的Midlet，生成Jar包之后，安装到手机上到最后会出现安装文件无效的提示。打开那个JAD文件，在Midlets标签里点击Add按钮，把org.bouncycastle.crypto.examples.MIDPTest添加进去即可。<br />
<br />
以上测试使用的环境是：<br />
JDK 1.5.02<br />
Eclipse 3.2.0<br />
Eclipse ME 1.7.7 <a href="http://eclipseme.org">http://eclipseme.org</a><br />
Sun WTK 2.5.2 for CLDC<br />
ProGuard 4.1&nbsp;<a href="http://proguard.sourceforge.net/" target="_blank">http://proguard.sourceforge.net/</a></span> <br />
<br />
<br />
刚刚发现Bouncy Castle的下载页面<a href="http://www.bouncycastle.org/latest_releases.html">http://www.bouncycastle.org/latest_releases.html</a>里面有专用于J2ME的源代码发行包，里面只包含用于J2ME的代码，如果仅用在J2ME下的话，这个应该比较简单，不用找半天。<br />
<img src ="http://www.blogjava.net/amplifier/aggbug/177838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2008-01-25 19:59 <a href="http://www.blogjava.net/amplifier/archive/2008/01/25/177838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java ME 的限制太多了</title><link>http://www.blogjava.net/amplifier/archive/2006/03/25/37299.html</link><dc:creator>amp@java</dc:creator><author>amp@java</author><pubDate>Fri, 24 Mar 2006 17:42:00 GMT</pubDate><guid>http://www.blogjava.net/amplifier/archive/2006/03/25/37299.html</guid><wfw:comment>http://www.blogjava.net/amplifier/comments/37299.html</wfw:comment><comments>http://www.blogjava.net/amplifier/archive/2006/03/25/37299.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/amplifier/comments/commentRss/37299.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/amplifier/services/trackbacks/37299.html</trackback:ping><description><![CDATA[
		<p>本来想在手机上开发一个短信加密发送/接收程序的，看了几天J2ME，发现限制很多，几乎无法实现。<br />短信发送是可以的，只要手机能提供WMA的API；但接收的话要注册监听端口，短信必须发到这个端口才能被程序监听到，然而，在J2ME之外，似乎没有短信端口这个概念，所以其他手机要往这个端口发短信都不知道如何操作。<br />不同的手机对J2ME的支持相差太多了，一个简单的发送程序，在NOKIA3230上可以运行，在QD上就不行，而且是莫名其妙地打开了一个空白窗口，什么选项都看不见，按什么键都没反应，都不知出了什么问题。</p>
<img src ="http://www.blogjava.net/amplifier/aggbug/37299.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/amplifier/" target="_blank">amp@java</a> 2006-03-25 01:42 <a href="http://www.blogjava.net/amplifier/archive/2006/03/25/37299.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>