庄生晓梦

庄生晓梦迷蝴蝶

博客园 首页 新随笔 联系 订阅 管理

对称加密算法:双方必须约定好算法
DES 数据加密标准:由于不断地被破解 自98年起就已经逐渐放弃使用
DES算法标准
DES加密算法运作流程
AES 目前使用最多的加密方式,官方并未公布加密方式已被破解,替代DES
AES算法标准

实现和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 算法的加解密方式

算法实现源码下载地址:http://download.csdn.net/detail/jacxuan/9774737

posted on 2017-03-09 00:39  qwop  阅读(477)  评论(0编辑  收藏  举报