- 浏览: 602523 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
Garlic_90:
ireport分页的话代码写起来有些复杂,我以前试过,比较简单 ...
ireport分页显示 -
feijiing:
nice,problem solved,thanks!
虚拟机安装centos no valid devices were found on which to cereate new file systems -
Jocken:
引用的jar包需要怎么加在命令里面?十多个呢,为什么配在MAN ...
linux 如何运行jar包 -
xiaoqiao800:
看到你的问题,有帮助,我之前都是手动的clear项目下的cla ...
The project cannot be built until build path errors are resolved -
mfkdzhou:
楼主好,我现在也遇到这个问题,可以把源代码发一份不?谢谢了。8 ...
java打印
java加密解密算法记录
- 博客分类:
- java
以下内容均摘自我买的书籍《java加密与解密的艺术》作者 梁栋
附证书生成命令:
keytool生成证书
keytool -genkeypair -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -validity 360 -alias www.dominic.com -keystore dominic.keystore
导出数字证书
keytool -exportcert -alias www.dominic.com -keystore dominic.keystore -file dominic.cer -rfc
打印数字证书
keytool -printcert -file dominic.cer
这里是自制证书,如果需要权威机构签发,需要导出证书申请文件由第三方签发
openssl证书创建
根证书构建命令?
echo 构建随机数 private/.rand
openssl rand -out private/.rand 1000
echo 构建根证书私钥 private/ca.key.pem
openssl genrsa -aes256 -out private/ca.key.pem 2048
echo 生成根证书签发申请 private/ca.csr
openssl req -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=BJ/L=BJ/O=dominic/OU=dominic/CN=www.dominic.com"
echo 签发根证书 private/ca.cer
openssl x509 -req -days 10000 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certs/ca.cer
echo 根证书转换 private/ca.p12
openssl pkcs12 -export -cacerts inkey private/ca.key.pem -in private/ca.csr -out certs/ca.cer
服务器证书构建步骤命令?
(1)echo 构建服务器私钥 private/server.key.pem
(2)openssl genrsa -aes256 -out private/server.key.pem 2048
echo 生成服务器证书签发申请 private/server.csr
(3)openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=BJ/L=BJ/O=dominic/OU=dominic/CN=www.dominic.com"
echo 签发服务器证书 private/server.cer
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certs/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certs/server.cer
echo 服务器证书转换 private/server.p12
openssl pkcs12 -export -clcerts -inkey private/server.key.pem -in certs/server.cer -out certs/server.p12
客户证书构建命令?
echo 构建客户私钥 private/client.key.pem
openssl genrsa -aes256 -out private/client.key.pem 2048
echo 生成服务器证书签发申请 private/client.csr
openssl req -new -key private/client.key.pem -out private/client.csr -subj "/C=CN/ST=BJ/L=BJ/O=dominic/OU=dominic/CN=www.dominic.com"
echo 签发客户证书 private/server.cer
openssl ca -days 3650 -in private/client.csr -out certs/client.cer -cert certs/ca.cer -keyfile private/ca.key.pem
echo 客户证书转换 certs/client.p12
openssl pkcs12 -export -inkey private/client.key.pem -in certs/client.cer -out certs/client.p12
package com.algorithm; import java.security.Key; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.HashMap; import java.util.Map; import javax.crypto.Cipher; import org.apache.commons.codec.binary.Hex; /** * RSA非对称加密算法安全编码组件 * @author Administrator * */ public abstract class RSACoder { //非对称加密密钥算法 public static final String KEY_ALGORITHM="RSA"; //数字签名 签名/验证算法 public static final String SIGNATURE_ALGORRITHM="SHA1withRSA"; //公钥 private static final String PUBLIC_KEY="RSAPublicKey"; //私钥 private static final String PRIVATE_KEY="RSAPrivateKey"; //RSA密钥长度,默认为1024,密钥长度必须是64的倍数,范围在521~65526位之间 private static final int KEY_SIZE=512; /** * 私钥解密 * @param data 待解密数据 * @param key 私钥 * @return byte[] 解密数据 * @throws Exception */ public static byte[] decryptByPrivateKey(byte[] data,byte[]key) throws Exception { //取得私钥 PKCS8EncodedKeySpec pkcs8KeySpec=new PKCS8EncodedKeySpec(key); KeyFactory keyFactory=KeyFactory.getInstance(KEY_ALGORITHM); //生成私钥 PrivateKey privateKey=keyFactory.generatePrivate(pkcs8KeySpec); //对数据解密 Cipher cipher=Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, privateKey); return cipher.doFinal(data); } /** * 私钥解密 * @param data 待解密数据 * @param key 私钥 * @return byte[] 解密数据 * @throws Exception */ public static byte[] decryptByPrivateKey(byte[] data,String privateKey) throws Exception { return decryptByPrivateKey(data,getKey(privateKey)); } /** * 公钥解密 * @param data 待解密数据 * @param key 公钥 * @return byte[] 解密数据 * @throws Exception */ public static byte[] decryptByPublicKey(byte[] data,byte[] key) throws Exception { //取得公钥 X509EncodedKeySpec x509KeySpec=new X509EncodedKeySpec(key); KeyFactory keyFactory=KeyFactory.getInstance(KEY_ALGORITHM); //生成公钥 PublicKey publicKey=keyFactory.generatePublic(x509KeySpec); //对数据解密 Cipher cipher=Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, publicKey); return cipher.doFinal(data); } /** * 公钥解密 * @param data 待解密数据 * @param key 公钥 * @return byte[] 解密数据 * @throws Exception */ public static byte[] decryptByPublicKey(byte[] data,String publicKey) throws Exception { return decryptByPublicKey(data,getKey(publicKey)); } /** * 公钥加密 * @param data 待加密数据 * @param key 公钥 * @return byte[] 加密数据 * @throws Exception */ public static byte[] encryptByPublicKey(byte[] data,byte[] key) throws Exception { //取得公钥 X509EncodedKeySpec x509KeySpec=new X509EncodedKeySpec(key); KeyFactory keyFactory=KeyFactory.getInstance(KEY_ALGORITHM); PublicKey publicKey=keyFactory.generatePublic(x509KeySpec); //对数据加密 Cipher cipher=Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.ENCRYPT_MODE, publicKey); return cipher.doFinal(data); } /** * 公钥加密 * @param data 待加密数据 * @param key 公钥 * @return byte[] 加密数据 * @throws Exception */ public static byte[] encryptByPublicKey(byte[] data,String publicKey) throws Exception { return encryptByPublicKey(data,getKey(publicKey)); } /** * 私钥加密 * @param data 待加密数据 * @param key 私钥 * @return byte[] 加密数据 * @throws Exception */ public static byte[] encryptByPrivateKey(byte[] data,byte[] key) throws Exception { //取得私钥 PKCS8EncodedKeySpec pkcs8KeySpec=new PKCS8EncodedKeySpec(key); KeyFactory keyFactory=KeyFactory.getInstance(KEY_ALGORITHM); //生成私钥 PrivateKey privateKey=keyFactory.generatePrivate(pkcs8KeySpec); //对数据加密 Cipher cipher=Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.ENCRYPT_MODE, privateKey); return cipher.doFinal(data); } /** * 私钥加密 * @param data 待加密数据 * @param key 私钥 * @return byte[] 加密数据 * @throws Exception */ public static byte[] encryptByPrivateKey(byte[] data,String key) throws Exception { return encryptByPrivateKey(data,getKey(key)); } /** * 取得私钥 * @param keyMap 密钥Map * @return byte[] 私钥 * @throws Exception */ public static byte[] getPrivateKey(Map<String,Object> keyMap) throws Exception { Key key=(Key)keyMap.get(PRIVATE_KEY); return key.getEncoded(); } /** * 取得公钥 * @param keyMap 密钥Map * @return byte[] 公钥 * @throws Exception */ public static byte[] getPublicKey(Map<String,Object> keyMap) throws Exception { Key key=(Key)keyMap.get(PUBLIC_KEY); return key.getEncoded(); } /** * 初始化密钥 * @return 密钥Map * @throws Exception */ public static Map<String,Object> initKey() throws Exception { //实例化实钥对生成器 KeyPairGenerator keyPairGen=KeyPairGenerator.getInstance(KEY_ALGORITHM); //初始化密钥对生成器 keyPairGen.initialize(KEY_SIZE); //生成密钥对 KeyPair keyPair=keyPairGen.generateKeyPair(); //公钥 RSAPublicKey publicKey=(RSAPublicKey) keyPair.getPublic(); //私钥 RSAPrivateKey privateKey=(RSAPrivateKey) keyPair.getPrivate(); //封装密钥 Map<String,Object> keyMap=new HashMap<String,Object>(2); keyMap.put(PUBLIC_KEY, publicKey); keyMap.put(PRIVATE_KEY, privateKey); return keyMap; } /** * 签名 * @param data 待签名数据 * @param privateKey 私钥 * @return byte[] 数字签名 * @throws Exception */ public static byte[] sign(byte[] data,byte[] privateKey) throws Exception { //转接私钥材料 PKCS8EncodedKeySpec pkcs8KeySpec=new PKCS8EncodedKeySpec(privateKey); //实例化密钥工厂 KeyFactory keyFactory=KeyFactory.getInstance(KEY_ALGORITHM); //取私钥对象 PrivateKey priKey=keyFactory.generatePrivate(pkcs8KeySpec); //实例化Signature Signature signature=Signature.getInstance(SIGNATURE_ALGORRITHM); //初始化Signature signature.initSign(priKey); //更新 signature.update(data); //签名 return signature.sign(); } /** * 公钥校验 * @param data 待校验数据 * @param publicKey 公钥 * @param sign 数字签名 * @return * @throws Exception */ public static boolean verify(byte[] data,byte[] publicKey,byte[] sign) throws Exception { //转接公钥材料 X509EncodedKeySpec x509KeySpec=new X509EncodedKeySpec(publicKey); //实例化密钥工厂 KeyFactory keyFactory=KeyFactory.getInstance(KEY_ALGORITHM); //生成公钥 PublicKey pubKey=keyFactory.generatePublic(x509KeySpec); //实例化Signature Signature signature=Signature.getInstance(SIGNATURE_ALGORRITHM); //初始化Signature signature.initVerify(pubKey); //更新 signature.update(data); //验证 return signature.verify(sign); } /** * 私钥签名 * @param data 待签名数据 * @param privateKey 私钥 * @return String 十六进制签名字符串 * @throws Exception */ public static String sign(byte[] data,String privateKey) throws Exception { byte[] sign=sign(data,getKey(privateKey)); return Hex.encodeHexString(sign); } /** * 公钥校验 * @param data 待验证数据 * @param publicKey 公钥 * @param sign 签名 * @return boolean 成功返回true,失败返回false * @throws Exception */ public static boolean verify(byte[] data,String publicKey,String sign) throws Exception { return verify(data,getKey(publicKey),Hex.decodeHex(sign.toCharArray())); } /** * 取得私钥十六进制表示形式 * @param keyMap 密钥Map * @return String 私钥十六进制字符串 * @throws Exception */ public static String getPrivateKeyString(Map<String,Object> keyMap) throws Exception { return Hex.encodeHexString(getPrivateKey(keyMap)); } /** * 取得公钥十六进制表示形式 * @param keyMap 密钥Map * @return String 公钥十六进制字符串 * @throws Exception */ public static String getPublicKeyString(Map<String,Object> keyMap) throws Exception { return Hex.encodeHexString(getPublicKey(keyMap)); } /** * 获取密钥 * @param key 密钥 * @return byte[] 密钥 * @throws Exception */ public static byte[] getKey(String key) throws Exception { return Hex.decodeHex(key.toCharArray()); } }
package com.algorithm; import java.util.Map; import org.apache.commons.codec.binary.Base64; /** * RSA算法测试用例 * @author Administrator * */ public class RSACoderTest { //公钥 private static byte[] publicKey; //私钥 private static byte[] privateKey; /** * 初始化密钥 * @throws Exception */ public static void initKey() throws Exception { //初始化密钥 Map<String,Object> keyMap=RSACoder.initKey(); publicKey=RSACoder.getPublicKey(keyMap); privateKey=RSACoder.getPrivateKey(keyMap); System.out.println("公钥:"+Base64.encodeBase64String(publicKey)); System.out.println("私钥:"+Base64.encodeBase64String(privateKey)); } public static void test() throws Exception { String inputStr="RSA加密算法,私钥加密,公钥解密"; byte[] data=inputStr.getBytes(); //私钥加密 byte[] enCodeData=RSACoder.encryptByPrivateKey(data,privateKey); System.out.println("加密字符串:"+Base64.encodeBase64String(enCodeData)); //公钥解密 byte[] deCodeData=RSACoder.decryptByPublicKey(enCodeData, publicKey); System.out.println(new String(deCodeData).equals(inputStr)); } /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub initKey(); RSACoderTest.test(); } }
package com.algorithm; import java.io.FileInputStream; import java.security.KeyStore; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import javax.crypto.Cipher; /** * 证书组件 * @author Administrator */ public abstract class CertificateCoder { //类型证书 private static final String CERT_TYPE="X.509"; /** * 由KeyStore获得私钥 * @param keyStorePath 密钥库路径 * @param alias 别名 * @param password 密码 * @return PrivateKey 密钥 * @throws Exception */ private static PrivateKey getPrivateKeyByKeyStore(String keyStorePath,String alias,String password) throws Exception { //获得密钥库 KeyStore ks=getKeyStore(keyStorePath,password); //获得私钥 return (PrivateKey)ks.getKey(alias, password.toCharArray()); } /** * 由Certificate获得公钥 * @param certificatePath 证书路径 * @return PublicKey 公钥 */ private static PublicKey getPublicKeyByCertificate(String certificatePath) throws Exception { //获得证书 Certificate certificate=getCertificate(certificatePath); //获得公钥 return certificate.getPublicKey(); } /** * 获得certificate * @param certificatePath 证书路径 * @return Certificate 证书 * @throws Exception */ private static Certificate getCertificate(String certificatePath) throws Exception { //实例化证书工厂 CertificateFactory certificateFactory=CertificateFactory.getInstance(CERT_TYPE); //取得证书文件流 FileInputStream in=new FileInputStream(certificatePath); //生成证书 Certificate certificate=certificateFactory.generateCertificate(in); //关闭证书文件流 in.close(); return certificate; } /** * 取得Certificate * @param keyStorePath 密钥库路径 * @param alias 别名 * @param password 密码 * @return Certificate 证书 * @throws Exception */ private static Certificate getCertificate(String keyStorePath,String alias,String password) throws Exception { //获得密钥库 KeyStore ks=getKeyStore(keyStorePath,password); //获得证书 return ks.getCertificate(alias); } /** * 获得密钥库 * @param keyStorePath 密钥库路径 * @param password 密码 * @return KeyStore 密钥库 * @throws Exception */ private static KeyStore getKeyStore(String keyStorePath,String password) throws Exception { //实例化密钥库 KeyStore ks=KeyStore.getInstance(KeyStore.getDefaultType()); //获得密钥库文件流 FileInputStream in=new FileInputStream(keyStorePath); //加载密钥库 ks.load(in, password.toCharArray()); //关闭密钥库文件流 in.close(); return ks; } /** * 私钥加密 * @param data 待加密数据 * @param keyStorePath 密钥库路径 * @param alias 别名 * @param password 密码 * @return byte[] 加密数据 * @throws Exception */ public static byte[] encryptByPrivateKey(byte[] data,String keyStorePath,String alias,String password) throws Exception { //取得私钥 PrivateKey privateKey=getPrivateKeyByKeyStore(keyStorePath,alias,password); //对数据加密 Cipher cipher=Cipher.getInstance(privateKey.getAlgorithm()); cipher.init(Cipher.ENCRYPT_MODE, privateKey); return cipher.doFinal(data); } /** * 私钥解密 * @param data 待解密数据 * @param keyStorePath 密钥库路径 * @param alias 别名 * @param password 密码 * @return byte[] 加密数据 * @throws Exception */ public static byte[] decryptByPrivateKey(byte[] data,String keyStorePath,String alias,String password) throws Exception { //取得私钥 PrivateKey privateKey=getPrivateKeyByKeyStore(keyStorePath,alias,password); //对数据解密 Cipher cipher=Cipher.getInstance(privateKey.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, privateKey); return cipher.doFinal(data); } /** * 公钥加密 * @param data 待加密数据 * @param certificatePath 证书路径 * @return byte[] 加密数据 * @throws Exception */ public static byte[] encryptByPublicKey(byte[] data,String certificatePath) throws Exception { //取得公钥 PublicKey publicKey=getPublicKeyByCertificate(certificatePath); //对数据加密 Cipher cipher=Cipher.getInstance(publicKey.getAlgorithm()); cipher.init(Cipher.ENCRYPT_MODE, publicKey); return cipher.doFinal(data); } /** * 公钥解密 * @param data 待解密数据 * @param certificatePath 证书路径 * @return byte[] 解密数据 * @throws Exception */ public static byte[] decryptByPublicKey(byte[] data,String certificatePath) throws Exception { //取得公钥 PublicKey publicKey=getPublicKeyByCertificate(certificatePath); //对数据解密 Cipher cipher=Cipher.getInstance(publicKey.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, publicKey); return cipher.doFinal(data); } /** * 签名 * @param data 待签名数据 * @param keyStorePath 密钥库路径 * @param alias 别名 * @param password 密码 * @return byte[] 签名 * @throws Exception */ public static byte[] sign(byte[] data,String keyStorePath,String alias,String password) throws Exception { //获得证书 X509Certificate x509Certificate=(X509Certificate)getCertificate(keyStorePath,alias,password); //构建签名,由证书指定签名算法 Signature signature=Signature.getInstance(x509Certificate.getSigAlgName()); //获取私钥 PrivateKey privateKey=getPrivateKeyByKeyStore(keyStorePath, alias, password); //初始化签名,由私钥构建 signature.initSign(privateKey); signature.update(data); return signature.sign(); } /** * 签名验证 * @param data 数据 * @param sign 签名 * @param certificatePath 证书路径 * @return boolean 验证通过为true * @throws Exception */ public static boolean verify(byte[] data,byte[] sign,String certificatePath) throws Exception { //获得证书 X509Certificate x509Certificate=(X509Certificate)getCertificate(certificatePath); //构建签名,由证书指定签名算法 Signature signature=Signature.getInstance(x509Certificate.getSigAlgName()); //由证书初始化签名,实际上是使用了证书中的公钥 signature.initVerify(x509Certificate); signature.update(data); return signature.verify(sign); } }
package com.algorithm; import java.io.InputStream; import org.apache.commons.codec.binary.Hex; /** * 数字证书测试用例 * @author Administrator * */ public class CertificateCoderTest { //生成证书时的密码 private static String password="123456"; //别名 private static String alias="www.dominic.com"; //证书路径 private static String certificatePath="D:\\Program Files\\OpenSSL-Win32\\ca\\certs\\dominic.cer"; //密钥库路径 private static String keyStorePath="D:\\Program Files\\OpenSSL-Win32\\ca\\certs\\domini.keystore"; /** * 公钥加密私钥解密 */ public static void test1() throws Exception { String inputStr="数字证书"; byte[] data=inputStr.getBytes(); //公钥加密 byte[] encrypt=CertificateCoder.encryptByPublicKey(data, certificatePath); //私钥解密 byte[] decrypt=CertificateCoder.decryptByPrivateKey(encrypt, keyStorePath, alias, password); System.out.println(new String(decrypt).equals(inputStr)); } /** * 私加密公钥解密 */ public static void test2() throws Exception { String inputStr="数字证书"; byte[] data=inputStr.getBytes(); //私钥加密 byte[] encrypt=CertificateCoder.encryptByPrivateKey(data, keyStorePath, alias, password); //公钥解密 byte[] decrypt=CertificateCoder.decryptByPublicKey(encrypt, certificatePath); System.out.println(new String(decrypt).equals(inputStr)); } /** * 签名验证 */ public static void test3() throws Exception { String inputStr="数字签名"; byte[] data=inputStr.getBytes(); //私钥签名 byte[] sign=CertificateCoder.sign(data, keyStorePath, alias, password); System.out.println("签名:"+Hex.encodeHexString(sign)); //公钥验证 System.out.println(CertificateCoder.verify(data, sign, certificatePath)); } public static void main(String[] args) throws Exception { CertificateCoderTest.test1(); CertificateCoderTest.test2(); CertificateCoderTest.test3(); } }
package com.algorithm; import java.security.Key; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.digest.DigestUtils; /** * AES对称加密算法,组件类 * @author Administrator * */ public abstract class AESCoder { //密钥算法 public static final String ALGORITHM="AES"; //密钥长度(java默认只能处理128位以内的长度,如果需要处理大于128位可以使用JCE解除密钥长度限制) public static final int KEY_SIZE=128; /** * 转换密钥 * @param key 二进制密钥 * @return Key 密钥 * @throws Exception */ private static Key toKey(byte[] key) throws Exception { //实例化AES密钥材料 SecretKey secretKey=new SecretKeySpec(key,ALGORITHM); return secretKey; } /** * 解密 * @param data 待解密数据 * @param key 密钥 * @return byte[] 解密数据 * @throws Exception */ public static byte[] decrypt(byte[] data,byte[] key) throws Exception { //还原密钥 Key k=toKey(key); //实例化 Cipher cipher=Cipher.getInstance(ALGORITHM); //初始化,设置为解密模式 cipher.init(Cipher.DECRYPT_MODE, k); //执行操作 return cipher.doFinal(data); } /** * 解密 * @param data 待解密数据 * @param key 密钥 * @return byte[] 解密数据 * @throws Exception */ public static byte[] decrypt(byte[] data,String key) throws Exception { return decrypt(data,getKey(key)); } /** * 加密 * @param data 待加密数据 * @param key 密钥 * @return byte[] 加密数据 * @throws Exception */ public static byte[] encrypt(byte[] data,byte[] key) throws Exception { //还原密钥 Key k=toKey(key); //实例化 Cipher cipher=Cipher.getInstance(ALGORITHM); //初始化,设置为加密模式 cipher.init(Cipher.ENCRYPT_MODE, k); //执行操作 return cipher.doFinal(data); } /** * 加密 * @param data 待加密数据 * @param key 密钥 * @return byte[] 加密数据 * @throws Exception */ public static byte[] encrypt(byte[] data,String key) throws Exception { return encrypt(data,getKey(key)); } /** * 生成密钥 * @return byte[] 二进制密钥 * @throws Exception */ public static byte[] initKey() throws Exception { //实例化 KeyGenerator kg=KeyGenerator.getInstance(ALGORITHM); //初始化密钥长度 kg.init(KEY_SIZE); //生成秘密密钥 SecretKey secretKey=kg.generateKey(); //获得密钥的二进制编码形式 return secretKey.getEncoded(); } /** * 初始化密钥 * @return String Base64编码密钥 * @throws Exception */ public static String initKeyString() throws Exception { return Base64.encodeBase64String(initKey()); } /** * 获取密钥 * @param key * @return byte[] 密钥 * @throws Exception */ public static byte[] getKey(String key) throws Exception { return Base64.decodeBase64(key); } /** * 摘要处理 * @param data 待摘要数据 * @return String 摘要字符串 */ public static String shaHex(byte[] data) { return DigestUtils.md5Hex(data); } /** * 验证 * @param data 待摘要数据 * @param messageDigest 摘要字符串 * @return 验证结果 */ public static boolean validate(byte[] data,String messageDigest) { return messageDigest.equals(shaHex(data)); } }
package com.algorithm; /** * 对称加密算法测试用例 * @author Administrator * */ public class AESCoderTest { public static void main(String args[]) { try { //初始化密钥 String secretKey=AESCoder.initKeyString(); System.out.println("密钥为:"+secretKey); String s="我们的大中国"; //加密数据 byte[] encryptData=AESCoder.encrypt(s.getBytes(), secretKey); //解密数据 byte[] data=AESCoder.decrypt(encryptData, secretKey); //比较 System.out.println(new String(data).equals(s)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
附证书生成命令:
keytool生成证书
keytool -genkeypair -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -validity 360 -alias www.dominic.com -keystore dominic.keystore
导出数字证书
keytool -exportcert -alias www.dominic.com -keystore dominic.keystore -file dominic.cer -rfc
打印数字证书
keytool -printcert -file dominic.cer
这里是自制证书,如果需要权威机构签发,需要导出证书申请文件由第三方签发
openssl证书创建
根证书构建命令?
echo 构建随机数 private/.rand
openssl rand -out private/.rand 1000
echo 构建根证书私钥 private/ca.key.pem
openssl genrsa -aes256 -out private/ca.key.pem 2048
echo 生成根证书签发申请 private/ca.csr
openssl req -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=BJ/L=BJ/O=dominic/OU=dominic/CN=www.dominic.com"
echo 签发根证书 private/ca.cer
openssl x509 -req -days 10000 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certs/ca.cer
echo 根证书转换 private/ca.p12
openssl pkcs12 -export -cacerts inkey private/ca.key.pem -in private/ca.csr -out certs/ca.cer
服务器证书构建步骤命令?
(1)echo 构建服务器私钥 private/server.key.pem
(2)openssl genrsa -aes256 -out private/server.key.pem 2048
echo 生成服务器证书签发申请 private/server.csr
(3)openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=BJ/L=BJ/O=dominic/OU=dominic/CN=www.dominic.com"
echo 签发服务器证书 private/server.cer
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certs/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certs/server.cer
echo 服务器证书转换 private/server.p12
openssl pkcs12 -export -clcerts -inkey private/server.key.pem -in certs/server.cer -out certs/server.p12
客户证书构建命令?
echo 构建客户私钥 private/client.key.pem
openssl genrsa -aes256 -out private/client.key.pem 2048
echo 生成服务器证书签发申请 private/client.csr
openssl req -new -key private/client.key.pem -out private/client.csr -subj "/C=CN/ST=BJ/L=BJ/O=dominic/OU=dominic/CN=www.dominic.com"
echo 签发客户证书 private/server.cer
openssl ca -days 3650 -in private/client.csr -out certs/client.cer -cert certs/ca.cer -keyfile private/ca.key.pem
echo 客户证书转换 certs/client.p12
openssl pkcs12 -export -inkey private/client.key.pem -in certs/client.cer -out certs/client.p12
发表评论
-
java模拟点击
2020-05-12 18:26 462try { Dimension screenS ... -
jekins集成maven发布项目过程中遇到的坑
2017-04-05 14:33 1716背景: 用maven构建项目之后,每次需要部署集成测试环 ... -
logback配置
2015-08-17 15:30 661<?xml version="1.0" ... -
javamail
2014-07-09 21:35 802http://blog.csdn.net/zapldy/art ... -
jdbc批量插入数据
2013-11-10 11:35 856以下过程网上看到,备份一下语法而已 Connection co ... -
jdbc获得生成记录主键
2013-11-10 11:18 708在网上看到的,备份一下而已 Connection conn = ... -
jdbc调用存储过程
2013-11-10 11:12 673只是把调用过程备份一下 Connection conn = ... -
十六进制转字符串
2013-07-04 22:09 1347记录一下十六进制转字符串,以备以后使用方便 //十六进制转字符 ... -
模拟自动登录并发表日志
2012-12-11 20:11 1208公司要求每天都需要写 ... -
List.toArray()强转对象数组
2012-06-13 15:18 1501假设现在有一个集合list,里面装的都是对象A,如下代码进行强 ... -
正则表达式
2012-06-05 13:53 1如果你曾经用过Perl或任 ... -
关于LinkedHashMap的一些简单实验
2012-05-15 14:53 929同为实现了Map接口的类,LinedHashMap在迭代的时候 ... -
UUID
2012-05-14 15:34 1490转自http://popwang.iteye.com/blog ... -
eclipse install memory analyzer
2012-05-02 16:16 1084安装地址 http://download.eclipse.or ... -
common email发送邮件
2012-03-06 16:56 1613项目地址:http://commons.apache.org/ ... -
java实现压缩和解压缩
2012-03-01 16:17 1113转自于站内兄弟的文章:http://wallimn.iteye ... -
java算法记录
2012-02-07 19:12 844package com.algorithm; impor ... -
java中yield(),sleep()以及wait()的区别
2012-02-07 10:30 1002转自http://xiechengfa.iteye.com/b ... -
oracle调用java
2011-12-27 15:18 1477修改别人写的oracle数据库调用java代码,换了一个环境, ... -
myeclipse无法自动提法java类方法
2011-12-24 23:01 962转自:http://xzh2012.blog.163.com/ ...
相关推荐
Java实现的RSA加密解密算法示例 本文主要介绍了Java实现的RSA加密解密算法,结合实例形式分析了Java RSA加密解密算法的相关实现技巧。 知识点1:RSA加密解密算法简介 RSA加密解密算法是一种非对称加密算法,由Ron...
在这个"很强的Java加密解密算法源码.zip"中,我们可以深入学习如何在Java中实现3DES算法来加密和解密文件。 3DES算法是一种块加密算法,它通过三次应用DES密钥来增强安全性。基本流程如下: 1. **加密过程**:输入...
"java实现的RC4加密解密算法示例" RC4加密解密算法是Symmetric-key block cipher的一种,使用同一个密钥进行加密和解密。java实现的RC4加密解密算法可以通过以下步骤实现: 1. 初始化数组:创建一个大小为256的...
java实现MD5加密解密算法,java源代码~
### Java加密解密算法详解 #### 一、加密概述与应用 加密技术是信息安全领域中的关键技术之一,其核心在于通过特定算法对原始信息(明文)进行变换,使其成为不可直接阅读的形式(密文),从而保护信息在传输或...
本实例将探讨一些常见的加密解密算法及其在Java中的实现。以下是一些关键知识点: 1. **对称加密算法**:这类算法使用相同的密钥进行加密和解密,如DES(Data Encryption Standard)、3DES(Triple DES)和AES...
根据提供的文件信息,本文将详细解析“JAVA源码很强的Java加密解密算法源码”这一主题中的关键知识点。从标题和描述来看,这是一份关于Java加密解密算法的源代码,通过百度网盘分享的方式提供给感兴趣的开发者。下面...
在IT行业中,加密和解密是信息安全领域的重要...综上所述,Java加密解密算法源码涵盖了多种安全机制,开发者可以基于这些源码进一步理解并定制自己的加密解决方案。通过深入学习和实践,可以有效提升应用程序的安全性。
Java加密解密是信息安全领域的重要组成部分,用于保护数据的安全性和隐私。在Java中,我们可以使用多种加密算法来实现数据的加密和解密。本篇将详细介绍几种常见的加密算法及其在Java中的应用,包括DES、RSA以及非...
java加密解密算法的集合,AES DES。
在Java中实现AES(Advanced Encryption Standard)加密和解密算法主要涉及到对称密钥加密技术。AES算法是一种块密码,采用固定大小的128位(16字节)块进行加密和解密,支持128、192和256位的密钥长度。在给定的代码...
通过对Java加密解密算法的学习,特别是对Blowfish算法的深入理解,我们能够更好地保护数据的安全性。在实际开发中,选择合适的加密算法非常重要,同时还需要注意算法的安全性和性能之间的平衡。希望本文能帮助大家更...
*网上很多RC4算法在用的时候,都会出现「加密然后立即在内存中解密」可以,但先把加密后的密文写入文件再读取解密就失败的情况。这段代码没有这种情况。...*采用了重载函数,我用了String加密解密,成功。
TripleDES加密解密算法的实现(JAVA)
对文本进行加密和解密,异或加密和转化二进制十六进制加密
本篇文章将深入探讨Java加密解密的核心概念、常用算法以及如何使用它们。 一、加密的基本原理 加密是一种将明文数据转换为看似随机的密文的过程,目的是保护数据免受未经授权的访问。解密则是将密文还原为原始明文...
这个"java加密解密算法类_Cipher"可能包含了上述所有或部分知识点的实现,通过阅读源代码,我们可以更深入地理解Java中加密解密的实际应用和细节。在实际开发中,这些知识对于构建安全的网络通信、数据库存储和数据...
在这篇文档中,我们主要介绍了三种常用加密解密算法:DES算法、RSA算法以及MD5算法,并简要分析了它们的使用规则和安全性。 首先,DES(Data Encryption Standard,数据加密标准)算法是一种经典的对称密钥加密技术...
基于java的开发源码-很强的加密解密算法源码.zip 基于java的开发源码-很强的加密解密算法源码.zip 基于java的开发源码-很强的加密解密算法源码.zip 基于java的开发源码-很强的加密解密算法源码.zip 基于java的开发...