首页 / JAVA / 快速入门java中的密码应用开发
快速入门java中的密码应用开发
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了快速入门java中的密码应用开发,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6463字,纯文字阅读大概需要10分钟。
内容图文
![快速入门java中的密码应用开发](/upload/InfoBanner/zyjiaocheng/635/cea07ca2f2b0413597b023e05cc2860c.jpg)
今天介绍一下在java中如何进行密码应用开发。相关密码学概念及背景知识可参考前面的文章,本文不做过多介绍。示例代码均来自网上。
1.摘要:
目前广泛使用的算法有MD4、MD5、SHA-1,jdk对上面都提供了支持,在java中进行消息摘要很简单,java.security.MessageDigest提供了一个简易的操作方法:
/** *MessageDigestExample.java *Copyright 2005-2-16 */ import java.security.MessageDigest; /** *单一的消息摘要算法,不使用密码.可以用来对明文消息(如:密码)隐藏保存 */ public class MessageDigestExample{ public static void main(String[] args) throws Exception{ if(args.length!=1){ System.err.println("Usage:java MessageDigestExample text"); System.exit(1); } byte[] plainText=args[0].getBytes("UTF8"); //使用getInstance("算法")来获得消息摘要,这里使用SHA-1的160位算法 MessageDigest messageDigest=MessageDigest.getInstance("SHA-1"); System.out.println("\n"+messageDigest.getProvider().getInfo()); //开始使用算法 messageDigest.update(plainText); System.out.println("\nDigest:"); //输出算法运算结果 System.out.println(new String(messageDigest.digest(),"UTF8")); } }
2.对称加密:
使用对称加密的话,首先需要一个密钥,可用javax.crypto.KeyGenerator产生一个密钥(java.security.Key),然后传递给一个加密工具(javax.crypto.Cipher),该工具再使用相应的算法来进行加密,以下例子使用AES算法来加密:
/** *PrivateExmaple.java *Copyright 2005-2-16 */ 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!=1){ System.err.println("Usage:java PrivateExample "); System.exit(1); } byte[] plainText=args[0].getBytes("UTF8"); //通过KeyGenerator形成一个key System.out.println("\nStart generate AES key"); KeyGenerator keyGen=KeyGenerator.getInstance("AES"); keyGen.init(128); Key key=keyGen.generateKey(); System.out.println("Finish generating DES key"); //获得一个加密类Cipher,ECB是加密方式,PKCS5Padding是填充方法 Cipher cipher=Cipher.getInstance("AES/ECB/PKCS5Padding"); 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,"UTF8")); 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,"UTF8")); } } 3.非对称加解密: jdk提供了对RSA的支持。 /** *PublicExample.java *Copyright 2005-2-16 */ 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!=1){ System.err.println("Usage:java PublicExample "); System.exit(1); } byte[] plainText=args[0].getBytes("UTF8"); //构成一个RSA密钥 System.out.println("\nStart generating RSA key"); KeyPairGenerator keyGen=KeyPairGenerator.getInstance("RSA"); keyGen.initialize(1024); KeyPair key=keyGen.generateKeyPair(); System.out.println("Finish generating RSA key"); //获得一个RSA的Cipher类,使用公钥加密 Cipher cipher=Cipher.getInstance("RSA/ECB/PKCS1Padding"); 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,"UTF8")); //使用私钥解密 System.out.println("\nStart decryption"); cipher.init(Cipher.DECRYPT_MODE,key.getPrivate()); byte[] newPlainText=cipher.doFinal(cipherText); System.out.println("Finish decryption:"); System.out.println(new String(newPlainText,"UTF8")); } } 4.数字签名及验证 java中的java.security.Signature类提供了数字签名: /** *DigitalSignature2Example.java *Copyright 2005-2-16 */ import java.security.Signature; import java.security.KeyPairGenerator; import java.security.KeyPair; import java.security.SignatureException; /** *数字签名,使用RSA私钥对对消息摘要签名,然后使用公钥验证 */ public class DigitalSignature2Example{ public static void main(String[] args) throws Exception{ if(args.length!=1){ System.err.println("Usage:java DigitalSignature2Example "); System.exit(1); } byte[] plainText=args[0].getBytes("UTF8"); //形成RSA公钥对 System.out.println("\nStart generating RSA key"); KeyPairGenerator keyGen=KeyPairGenerator.getInstance("RSA"); keyGen.initialize(1024); KeyPair key=keyGen.generateKeyPair(); System.out.println("Finish generating RSA key"); //使用私钥签名 Signature sig=Signature.getInstance("SHA1WithRSA"); sig.initSign(key.getPrivate()); sig.update(plainText); byte[] signature=sig.sign(); System.out.println(sig.getProvider().getInfo()); System.out.println("\nSignature:"); System.out.println(new String(signature,"UTF8")); //使用公钥验证 System.out.println("\nStart signature verification"); sig.initVerify(key.getPublic()); sig.update(plainText); try{ if(sig.verify(signature)){ System.out.println("Signature verified"); }else System.out.println("Signature failed"); }catch(SignatureException e){ System.out.println("Signature failed"); } } }
5.数字证书。
java是以密钥库的形式存储密钥和证书的,而密钥库就是缺省名称为.keystore的文件(因此java不能使用USB Key载体的证书),里面的密钥和证书可以拥有名称(称为别名),每个别名都由唯一的密码保护。密钥库本身也受密码保护。
我们可以使用工具keytool,对密钥库进行管理,其主要命令如下。
certreq生成证书请求
changealias更改条目的别名
delete删除条目
exportcert导出证书
genkeypair生成密钥对
genseckey生成密钥
gencert根据证书请求生成证书
importcert导入证书或证书链
importkeystore从其他密钥库导入一个或所有条目
keypasswd更改条目的密钥口令
list列出密钥库中的条目
printcert打印证书内容
printcertreq打印证书请求的内容
printcrl打印CRL文件的内容
storepasswd更改密钥库的存储口令
可以看出,虽然不是真正的CA系统,但keytool已经提供了CA最基本的功能。java提供了KeyStore、X509Certificate等类对密钥库和证书进行操作:
InputStream inStream = new FileInputStream("c:/certificate.p12"); KeyStore ks = KeyStore.getInstance("PKCS12"); ks.load(inStream, "password".toCharArray()); String alias = ks.aliases().nextElement(); certificate = (X509Certificate) ks.getCertificate(alias); System.out.println(certificate .getNotAfter());
上面介绍的都是最基本的东西,并不是很难,但有助于大家快速实现在java中的密码应用开发。要说明的是,java自带的密码实现类其实是有限制的,一些复杂的功能或更高级算法(如256位的AES)并不支持。因此可以去找一些第三方密码功能包来代替使用。
内容总结
以上是互联网集市为您收集整理的快速入门java中的密码应用开发全部内容,希望文章能够帮你解决快速入门java中的密码应用开发所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。