对称加密算法:双方必须约定好算法
DES 数据加密标准:由于不断地被破解 自98年起就已经逐渐放弃使用
AES 目前使用最多的加密方式,官方并未公布加密方式已被破解,替代DES
实现和DES非常接近
JDK无政策限制权限文件:因为某些国家的进口管制限制,Java发布的运行环境包中的加解密有一定的限制
构成:口令+盐(特殊的随机数或者字符串)
非对称加密算法:与门加密算法。
公钥和私钥分开,使用公钥加密的数据只有它的私钥一致才能解开。
DH 密钥交换算法
・・初始化发送方密钥:KeyPairGenrator(得到keyPair) KeyPair(得到公钥和私钥) PublicKey(公钥)
初始化接收方密钥:KeyFactory(通过某种规范生成密钥) X509EncodeedKeySpec(按照x509生成编码)
DHPublicKey DHParameterSpec(使用参数的集合) KeypairGenerator privateKey
密钥构建:KeyAgreement(提供秘钥协定协议) SecretKey(秘密密钥,生成一个分组的秘密密钥)KeyFactory
X509EncodeedKeySpec PublicKey
加密、解密
Cipher(为加密解密提供功能接口)
RSA 基于因子分解 目前适用范围最广的非对称加密算法
唯一广泛接受并实现
数据加密&数字签名
公钥加密、私钥解密
私钥加密、公钥解密
“`
//1.//初始化密钥
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(“RSA”);
keyPairGenerator.initialize(512);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateCrtKey rsaPrivateCrtKey = (RSAPrivateCrtKey) keyPair.getPrivate();
System.out.println(“public Key:” + org.apache.commons.codec.binary.Base64.encodeBase64String(rsaPublicKey.getEncoded()));
System.out.println(“private Key:”+org.apache.commons.codec.binary.Base64.encodeBase64String(rsaPrivateCrtKey.getEncoded()));
//2.a//私钥加密,公钥解密 -- 加密
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateCrtKey.getEncoded());
KeyFactory factory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = factory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte[] result = cipher.doFinal(str.getBytes());
System.out.println("私钥加密、公钥解密:"+org.apache.commons.codec.binary.Base64.encodeBase64String(result));
//2.b//私钥加密,公钥解密 -- 解密
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
factory = KeyFactory.getInstance("RSA");
PublicKey publicKey = factory.generatePublic(x509EncodedKeySpec);
cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE,publicKey);
result = cipher.doFinal(result);
System.out.println("私钥加密、公钥解密:"+new String(result));
//3.a公钥加密、私钥 -- 加密
x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
factory = KeyFactory.getInstance("RSA");
publicKey = factory.generatePublic(x509EncodedKeySpec);
cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE,publicKey);
result = cipher.doFinal(str.getBytes());
System.out.println("公钥加密、私钥 -- 加密:"+org.apache.commons.codec.binary.Base64.encodeBase64String(result));
//3.b公钥加密、私钥 -- 加密
pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateCrtKey.getEncoded());
factory = KeyFactory.getInstance("RSA");
privateKey = factory.generatePrivate(pkcs8EncodedKeySpec);
cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
result = cipher.doFinal(result);
System.out.println("公钥加密、私钥 -- 解密:"+new String(result));
“`//其余部分实现方法差不多,就不都贴出来了,下面我放上源码下载地址
ElGamal 公钥加密算法 BC实现
和RSA实现方式一样.
Security.addProvider(new BouncyCastleProvider);
javaBase64 消息摘要算法加解密 对称算法加解密 非对称算法加解密 数字签名算法源码
包含Base64 MD家族(MD2 MD4 MD5)DES AES DH RSA DSA ECDSA 算法的加解密方式