浏览 6850 次
锁定老帖子 主题:证书加密解密
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-29
/** * 证书加密解密(不能对文件加密,这个只能对一小段字符加密解密) * @param certPath 证书路径 * @param password 证书密码 */ private static void encrypAndDecryption(String certPath,String certPassWord,String encryptData){ //此类表示密钥和证书的存储设施 KeyStore keyStore; String alias = ""; //String testEncrypt = "certificate encrypt decryption"; System.out.println("加密前: " + encryptData); try { FileInputStream is = new FileInputStream(certPath); //得到KeyStore实例 keyStore = KeyStore.getInstance("PKCS12"); //从指定的输入流中加载此 KeyStore。 keyStore.load(is, certPassWord.toCharArray()); is.close(); //获取keyStore别名 alias = (String)keyStore.aliases().nextElement(); Certificate cert = keyStore.getCertificate(alias); //根据给定别名获取相关的私钥 PrivateKey priKey = (PrivateKey)keyStore.getKey(alias, certPassWord.toCharArray()); //获取证书的公钥 PublicKey pubKey = cert.getPublicKey(); //获取Cipher的实例 getInstance(算法/模式/填充)或getInstance("算法") Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); //公钥初始化Cipher 公钥加密 cipher.init(Cipher.ENCRYPT_MODE, pubKey); //加密 byte [] encodeEncryp = cipher.doFinal(encryptData.getBytes()); System.out.println("加密后: " + new String(encodeEncryp)); //encodeEncryp = cipher.doFinal(getFileContentToByte(encrypFile)); //私钥初始化Cipher 私钥解密 cipher.init(Cipher.DECRYPT_MODE, priKey); //解密 byte [] encodeDecryption = cipher.doFinal(encodeEncryp); String content = new String(encodeDecryption); System.out.println("解密后: " + content + "length: " + content.length()); } catch (Exception e) { e.printStackTrace(); } } 下面有个测试用的certificate. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-05
密码是多少??
|
|
返回顶楼 | |
发表时间:2008-12-02
edisonwin 写道 密码是多少?? 密码是12345678 |
|
返回顶楼 | |
发表时间:2008-12-02
代码没看过.不过提两点意见.
1.文件中是否有中文,如果有建议进行BASE64转换. 2.建议不要使用Cipher,不同中间件的实现是不同的,修改JVM安全文件有可能会影响中间件的安全机制,所以最好自己去实现RSA. 再有 你说密码是12345678 好像RSA是一个密码对吧?模和素数. 共需要三个密码. |
|
返回顶楼 | |
发表时间:2008-12-02
fjlyxx 写道 代码没看过.不过提两点意见.1.文件中是否有中文,如果有建议进行BASE64转换.2.建议不要使用Cipher,不同中间件的实现是不同的,修改JVM安全文件有可能会影响中间件的安全机制,所以最好自己去实现RSA.再有 你说密码是12345678 好像RSA是一个密码对吧?模和素数. 共需要三个密码. 有中文的,处理中文Itext已经封装好了,有个包。 至于修改jvm的sucerity文件是因为sun不提供这种加密算法才修改的,jce只限于美国和加拿大地区使用。 Cipher 这个类也是Itext包封装好的类,这个因该不会有什么问题的。 我说的密码是证书的密码,这是在CA发布这张证书的时候设置的密码,这张证书只是个私钥而已。 很谢谢你给提的意见。 |
|
返回顶楼 | |