代码签名java 代码签名证书 个人
Java Verified 移动代码签名证书是什么?
Java Verified 是全球可信的测试及签发项目,用于确保开发者及无线运营商可以安心地开发,传播及货币化移动应用程序。作为一个开放的,行业所需的举措,Java Verified 是由 Unified Testing Initiative(UTI)开发的,建设检测框架的首个项目。Java Verified 是用于申请 Symbian Java 认证(Certified Signed)所须的代码签名证书。Java Verified 证书有效期为一年。比如GlobalSign证书就是这样的。
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、网站建设、东平网络推广、小程序制作、东平网络营销、东平企业策划、东平品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供东平建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
如何从java生成签名在AWS问题,怎么解决
Java2下Applet数字签名实现过程如下:
在代码的分发端:
(1)开发Java源程序并对其进行编译。
(2)用JAR工具对类文件和资源文件进行封装。
(3)用keytool创建公钥和密钥,生成X。509V1签名证书,输出证书。
(4)通过jarsigner工具用生成的密钥对JAR文件进行数字签名。
在代码的接收端:
(1)用keytool输入证书视其为可信任。
(2)用policytool创建和修改安全性策略配置文件,授权请求的访问权限。
(3)从网络取得字节码,用公钥验证数字签名证书和文档代码的完整性。
(4)验证字节码的合法性,根据策略文件分配相应权限。
(5)执行代码,完成后被垃圾回收器回收内存。
在用公钥验证数字签名证书之前,接收方需要确认公钥自身的可靠性,因此通常情况是提供一个包含公钥的证书而不是公钥自身。1个证书包括:
(1)1个公钥。
(2)1个唯一的名字实体(个人或公司),它是证书的所有者,包含用户名字、公司、组织、城市、地址、国家代码、省份等信息。
(3)数字签名:1个证书被1个分发者的实体签名,保证证书确实包含另1个实体(所有者)的公钥。
Java加密和数字签名 1消息摘要
本文主要谈一下密码学中的加密和数字签名 以及其在java中如何进行使用 对密码学有兴趣的伙伴 推荐看Bruce Schneier的著作 Applied Crypotography 在jdk 的发行版本中安全性方面有了很大的改进 也提供了对RSA算法的直接支持 现在我们从实例入手解决问题(本文仅是作为简单介绍)
一 密码学上常用的概念
)消息摘要
这是一种与消息认证码结合使用以确保消息完整性的技术 主要使用单向散列函数算法 可用于检验消息的完整性 和通过散列密码直接以文本形式保存等 目前广泛使用的算法有MD MD SHA jdk 对上面都提供了支持 在java中进行消息摘要很简单 java security MessageDigest提供了一个简易的操作方法
Java代码
/***MessageDigestExample java*Copyright */import java security MessageDigest;/***单一的消息摘要算法 不使用密码 可以用来对明文消息(如 密码)隐藏保存*/public class MessageDigestExample{ public static void main(String[] args) throws Exception{if(args length!= ){ System err println( Usage:java MessageDigestExample text ); System exit( );}byte[] plainText=args[ ] getBytes( UTF );//使用getInstance( 算法 )来获得消息摘要 这里使用SHA 的 位算法MessageDigest messageDigest=MessageDigest getInstance( SHA );System out println( +messageDigest getProvider() getInfo());//开始使用算法messageDigest update(plainText);System out println( Digest: );//输出算法运算结果System out println(new String(messageDigest digest() UTF )); }}
lishixinzhi/Article/program/Java/gj/201311/27287
Java加密和数字签名
Java加密和数字签名本文主要谈一下密码学中的加密和数字签名 以及其在java中如何进行使用 对密码学有兴趣的伙伴 推荐看 Bruce Schneier的著作 Applied Crypotography 在jdk 的发行版本中安全性方面有了很大的改进 也提供了对RSA算法的直接支持 现在我们从实例入手解决问题(本文仅是作为简单介绍)
一 密码学上常用的概念
)消息摘要
这是一种与消息认证码结合使用以确保消息完整性的技术 主要使用单向散列函数算法 可用于检验消息的完整性 和通过散列密码直接以文本形式保存等 目前广泛使用的算法有MD MD SHA jdk 对上面都提供了支持 在java中进行消息摘要很简单 java security MessageDigest提供了一个简易的操作方法
/** *MessageDigestExample java *Copyright */ import java security MessageDigest; /** *单一的消息摘要算法 不使用密码 可以用来对明文消息(如 密码)隐藏保存 */ public class MessageDigestExample{ public static void main(String[] args) throws Exception{ if(args length!= ){ System err println( Usage:java MessageDigestExample text ); System exit( ); }
byte[] plainText=args[ ] getBytes( UTF );
//使用getInstance( 算法 )来获得消息摘要 这里使用SHA 的 位算法 MessageDigest messageDigest=MessageDigest getInstance( SHA );
System out println( \n +messageDigest getProvider() getInfo()); //开始使用算法 messageDigest update(plainText); System out println( \nDigest: ); //输出算法运算结果 System out println(new String(messageDigest digest() UTF )); } } 还可以通过消息认证码来进行加密实现 javax crypto Mac提供了一个解决方案 有兴趣者可以参考相关API文档 本文只是简单介绍什么是摘要算法
这里补充另一个运用消息摘要的方式加密的例子: public class TestEncrypt {
public TestEncrypt() { }
/** * @param strSrc :strSrc is a string will be encrypted * @param encName : encName is the algorithm name will be used * encName dafault to MD * @return String */ public String Encrypt(String strSrc String encName) {
MessageDigest md = null; String strDes = null;
byte[] bt = strSrc getBytes(); try { if (encName == null || encName equals( )) { encName = MD ; } md = MessageDigest getInstance(encName); md update(bt); strDes = bytes Hex(md digest()); //to HexString } catch (NoSuchAlgorithmException e) { System out println( Invalid algorithm ); return null; } return strDes; }
public String bytes Hex(byte[] bts) { String des = ; String tmp = null; for (int i = ; i bts length; i++) { tmp = (Integer toHexString(bts[i] xFF)); if (tmp length() == ) { des += ; } des += tmp; } return des; }
public static void main(String[]args) { TestEncrypt te = new TestEncrypt(); String strSrc = 可以加密汉字 Oh and english ; System out println( Source String: + strSrc); System out println( Encrypted String: ); System out println( Use Def: + te Encrypt(strSrc null)); System out println( Use MD : + te Encrypt(strSrc MD )); System out println( Use SHA: + te Encrypt(strSrc SHA )); System out println( Use SHA : + te Encrypt(strSrc SHA )); } }
另外 在javawebparts中的 RequestHelpers里的generateGUID方法也涉及到了MD 的方法 代码如下: public static String generateGUID(HttpServletRequest request) {
String out = ; try { // Construct a string that is prised of: // Remote IP Address + Host IP Address + Date (yyyyMMdd) + // Time (hhmmssSSa) + Requested Path + Session ID + // HashCode Of ParameterMap StringBuffer *** = new StringBuffer( ); *** append(request getRemoteAddr()); InetAddress ia = InetAddress getLocalHost(); *** append(ia getHostAddress()); *** append(new SimpleDateFormat( yyyyMMddhhmmssSSa ) format(new Date())); String path = request getServletPath(); String pathInfo = request getPathInfo(); if (pathInfo != null) { path += pathInfo; } *** append(path); *** append(request getSession(false)); *** append(request getParameterMap() hashCode()); String str = *** toString(); // Now encode the string using an MD encryption algorithm MessageDigest md = MessageDigest getInstance( md ); md update(str getBytes()); byte[] digest = md digest(); StringBuffer hexStr = new StringBuffer( ); for (int i = ; i digest length; i++) { str = Integer toHexString( xFF digest[i]); if (str length() ) { str = + str; } hexStr append(str); } out = hexStr toString(); } catch (NoSuchAlgorithmException nsae) { log error(nsae); } catch (UnknownHostException uhe) { log error(uhe); } // Return the encrypted string It should be unique based on the // ponents that prise the plain text string and should always be // characters thanks to the MD algorithm return out;
} // End generateGUID()
)私钥加密
消息摘要只能检查消息的完整性 但是单向的 对明文消息并不能加密 要加密明文的消息的话 就要使用其他的算法 要确保机密性 我们需要使用私钥密码术来交换私有消息
这种最好理解 使用对称算法 比如 A用一个密钥对一个文件加密 而B读取这个文件的话 则需要和A一样的密钥 双方共享一个私钥(而在web环境下 私钥在传递时容易被侦听)
使用私钥加密的话 首先需要一个密钥 可用javax crypto KeyGenerator产生一个密钥(java security Key) 然后传递给一个加密工具(javax crypto Cipher) 该工具再使用相应的算法来进行加密 主要对称算法有 DES(实际密钥只用到 位) AES(支持三种密钥长度 位) 通常首先 位 其他的还有DESede等 jdk 种也提供了对对称算法的支持 以下例子使用AES算法来加密
/** *PrivateExmaple java *Copyright */ import javax crypto Cipher; import javax crypto KeyGenerator; import java security Key;
/** *私鈅加密 保证消息机密性 */ public class PrivateExample{ public static void main(String[] args) throws Exception{ if(args length!= ){ System err println( Usage:java PrivateExample text ); System exit( ); } byte[] plainText=args[ ] getBytes( UTF );
//通过KeyGenerator形成一个key System out println( \nStart generate AES key ); KeyGenerator keyGen=KeyGenerator getInstance( AES ); keyGen init( ); Key key=keyGen generateKey(); System out println( Finish generating DES key );
//获得一个私鈅加密类Cipher ECB是加密方式 PKCS Padding是填充方法 Cipher cipher=Cipher getInstance( AES/ECB/PKCS Padding ); System out println( \n +cipher getProvider() getInfo());
//使用私鈅加密 System out println( \nStart encryption: ); cipher init(Cipher ENCRYPT_MODE key); byte[] cipherText=cipher doFinal(plainText); System out println( Finish encryption: ); System out println(new String(cipherText UTF ));
System out println( \nStart decryption: ); cipher init(Cipher DECRYPT_MODE key); byte[] newPlainText=cipher doFinal(cipherText); System out println( Finish decryption: );
System out println(new String(newPlainText UTF ));
} }
)公钥加密
上面提到 私钥加密需要一个共享的密钥 那么如何传递密钥呢?web环境下 直接传递的话很容易被侦听到 幸好有了公钥加密的出现 公钥加密也叫不对称加密 不对称算法使用一对密钥对 一个公钥 一个私钥 使用公钥加密的数据 只有私钥能解开(可用于加密) 同时 使用私钥加密的数据 只有公钥能解开(签名) 但是速度很慢(比私钥加密慢 到 倍) 公钥的主要算法有RSA 还包括Blowfish Diffie Helman等 jdk 种提供了对RSA的支持 是一个改进的地方
/** *PublicExample java *Copyright */ import java security Key; import javax crypto Cipher; import java security KeyPairGenerator; import java security KeyPair; /** *一个简单的公鈅加密例子 Cipher类使用KeyPairGenerator生成的公鈅和私鈅 */ public class PublicExample{ public static void main(String[] args) throws Exception{ if(args length!= ){ System err println( Usage:java PublicExample text ); System exit( ); }
byte[] plainText=args[ ] getBytes( UTF ); //构成一个RSA密钥 System out println( \nStart generating RSA key ); KeyPairGenerator keyGen=KeyPairGenerator getInstance( RSA ); keyGen initialize( ); KeyPair key=keyGen generateKeyPair(); System out println( Finish generating RSA key );
//获得一个RSA的Cipher类 使用公鈅加密 Cipher cipher=Cipher getInstance( RSA/ECB/PKCS Padding ); System out println( \n +cipher getProvider() getInfo());
System out println( \nStart encryption ); cipher init(Cipher ENCRYPT_MODE key getPublic()); byte[] cipherText=cipher doFinal(plainText); System out println( Finish encryption: ); System out println(new String(cipherText UTF ));
lishixinzhi/Article/program/Java/hx/201311/26898
JAVA中 什么是方法签名
其实对于同名不同类、同类不同名的方法,方法签名的意义并不是很大,但是对于重载方法来说,方法签名的意义就十分巨大了。由于重载方法之间的方法名是相同的,那么我们势必要从构成方法的其他几个要素中找到另一个要素与方法名组成能够唯一标示方法的签名,方法体当然不予考虑。那么就是形参列表和返回值了,但是由于对于调用方法的人来说,方法的形参数据类型列表的重要程度要远远高于返回值,所以方法签名就由方法名+形参列表构成,也就是说,方法名和形参数据类型列表可以唯一的确定一个方法,与方法的返回值一点关系都没有,这是判断重载重要依据,所以,以下的代码是不允许的。
public long aaaa(){
}
public int aaaa(){
}
接下来,就来解释一下,当程序出现NoSuchMethodException时,JVM为我们提供的异常信息究竟是什么意思。首先我们先看几个方法以及他们的方法签名:
public void test1(){} test1()V
public void test2(String str) test2(Ljava/lang/String;)V
public int test3(){} test3()I
从以上三个例子,我们就可以很简单的看出一些小小的规律:
JVM为我们提供的方法签名实际上是由方法名(上文的例子为了简单没有写出全类名)、形参列表、返回值三部分构成的,基本形式就是:
全类名.方法名(形参数据类型列表)返回值数据类型
我们知道了JVM提供的方法签名的结构之后还是不够,因为JVM是并没有特别明确的将数据类型写出来,而是提供了特殊的表示法,下表就是对特殊表示字符、字母与对应数据类型的关系:
Java方法签名中特殊字符/字母含义
特殊字符 数据类型 特殊说明
V void 一般用于表示方法的返回值
Z boolean
B byte
C char
S short
I int
J long
F float
D double
[ 数组 以[开头,配合其他的特殊字符,表示对应数据类型的数组,几个[表示几维数组
L全类名; 引用类型 以L开头、;结尾,中间是引用类型的全类名
新闻名称:代码签名java 代码签名证书 个人
文章起源:http://cdiso.cn/article/hgeejc.html