`
desert3
  • 浏览: 2159126 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

对称加密、PBE基于密码加密、PKCS

 
阅读更多
对称加密:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。常用的对称加密有:DES(Data Encryption Standard)、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等
所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。

PBE——Password-based encryption(基于密码加密)其特点在于口令由用户自己掌管,不借助任何物理媒体;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。是一种简便的对称加密方式。
PBE算法没有密钥(秘密[对称]密钥)的概念,把密码+盐+消息摘要迭代数当做密钥了。因为密钥长短影响算法安全性,还不方便记忆,这里我们直接换成我们自己常用的密码就大大不同了,便于我们的记忆。但是单纯的密码很容易被字典法给穷举出来,所以我们这里给密码加了点“盐”,这个盐和密码组合,想破解就难了。同时我们将盐和口令合并后用消息摘要算法进行迭代很多次来构建密钥初始化向量的基本材料,使破译更加难了。
PBE算法没构建新的加密算法,就是用了我们常用的对称加密算法,例如AES,DES等算法。它是将密钥的概念转成 “口令+盐” 的方式,将不便于记忆的密钥转成便于记忆的口令。

这个是不是和我们到银行开的U盾有些像呢?
就拿民生银行的U盾来说,我们插上U盾,还需要我们去输入口令。然后才能到网上银行去登陆操作,付款的时候还是需要我们去输入口令。
1、U盾的盐从何来?:应该是那个闪盘的序列编号经过一定的处理得出的一个值,因为我们想要U盾生效,在民生的大厅中需要找一个机器激活的。那个激活的动作应该是将我们U盾这个闪盘中的数据写入到我们个人的账户中,相当于做了一次盐的公布
2、口令何来?:就是我们设定的登陆密码呀。这个在窗口办理的时候需要我们设定U盾的密码。并且我们在激活的时候可以改我们的密码

有了上边两个,我们再进行操作,就可以进行我们的身份发送数据的安全性了。网银的数据交换真的安全了...

java6和bouncycastle支持的算法列表
算法 密钥长度 密钥长度默认值 工作模式 填充方式 备注
PBEWithMD5AndDES 56 56 CBC PKCS5Padding java6实现
PBEWithMD5AndTripeDES 112、168 168 CBC PKCS6Padding java7实现
PBEWithSHA1AndDESede 112、168 168 CBC PKCS7Padding java8实现
PBEWithSHA1AndRC2_40 40至1024 128 CBC PKCS8Padding java9实现

PBEWithMD5AndDES 64 64 CBC PKCS5Padding/PKCS7Padding/ISO10126Padding/ZeroBytePadding BouncyCastle实现
PBEWithMD5AndRC2 128 128 CBC PKCS5Padding/PKCS7Padding/ISO10127Padding/ZeroBytePadding BouncyCastle实现
PBEWithSHA1AndDES 64 64 CBC PKCS5Padding/PKCS7Padding/ISO10128Padding/ZeroBytePadding BouncyCastle实现
PBEWithSHA1AndRC2 128 128 CBC PKCS5Padding/PKCS7Padding/ISO10129Padding/ZeroBytePadding BouncyCastle实现
PBEWithSHAAndIDEA-CBC 128 128 CBC PKCS5Padding/PKCS7Padding/ISO10130Padding/ZeroBytePadding BouncyCastle实现
PBEWithSHAAnd2-KeyTripleDES-CBC 128 128 CBC PKCS5Padding/PKCS7Padding/ISO10131Padding/ZeroBytePadding BouncyCastle实现
PBEWithSHAAnd3-KeyTripleDES-CBC 192 192 CBC PKCS5Padding/PKCS7Padding/ISO10132Padding/ZeroBytePadding BouncyCastle实现
PBEWithSHAAnd128BitRC2-CBC 128 128 CBC PKCS5Padding/PKCS7Padding/ISO10133Padding/ZeroBytePadding BouncyCastle实现
PBEWithSHAAnd40BitRC2-CBC 40 40 CBC PKCS5Padding/PKCS7Padding/ISO10134Padding/ZeroBytePadding BouncyCastle实现
PBEWithSHAAnd128BitRC4 128 128 CBC PKCS5Padding/PKCS7Padding/ISO10135Padding/ZeroBytePadding BouncyCastle实现
PBEWithSHAAnd40BitRC4 40 40 CBC PKCS5Padding/PKCS7Padding/ISO10136Padding/ZeroBytePadding BouncyCastle实现
PBEWithSHAAndTwofish-CBC 256 256 CBC PKCS5Padding/PKCS7Padding/ISO10137Padding/ZeroBytePadding BouncyCastle实现

PKCS:The Public-Key Cryptography Standards (PKCS)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签 名、数字信封的格式等方面的一系列相关协议。

PBE加密例子:
package com.ca.test;  
    import java.security.Key;  
    import java.security.SecureRandom;  
    import javax.crypto.Cipher;  
    import javax.crypto.SecretKey;  
    import javax.crypto.SecretKeyFactory;  
    import javax.crypto.spec.PBEKeySpec;  
    import javax.crypto.spec.PBEParameterSpec;  
    import org.apache.commons.codec.binary.Base64;  
    /** 
     * 对称加密算法:基于口令加密-PBE算法实现 
     * 使用java6提供的PBEWITHMD5andDES算法进行展示 
     * @author kongqz 
     * */  
    public class PBECoder {  
          
        /** 
         * JAVA6支持以下任意一种算法 
         * PBEWITHMD5ANDDES 
         * PBEWITHMD5ANDTRIPLEDES 
         * PBEWITHSHAANDDESEDE 
         * PBEWITHSHA1ANDRC2_40 
         * PBKDF2WITHHMACSHA1 
         * */  
        public static final String ALGORITHM="PBEWITHMD5andDES";  
          
        /** 
         * 迭代次数 
         * */  
        public static final int ITERATION_COUNT=100;  
          
        /** 
         * 盐初始化 
         * 盐长度必须为8字节 
         * @return byte[] 盐 
         * */  
        public static byte[] initSalt() throws Exception{  
            //实例化安全随机数  
            SecureRandom random=new SecureRandom();  
            //产出盐  
            return random.generateSeed(8);  
        }  
          
        /** 
         * 转换密钥 
         * @param password 密码 
         * @return Key 密钥 
         * */  
        private static Key toKey(String password) throws Exception{  
            //密钥彩礼转换  
            PBEKeySpec keySpec=new PBEKeySpec(password.toCharArray());  
            //实例化  
            SecretKeyFactory keyFactory=SecretKeyFactory.getInstance(ALGORITHM);  
            //生成密钥  
            SecretKey secretKey=keyFactory.generateSecret(keySpec);  
              
            return secretKey;  
        }  
        /** 
         * 加密 
         * @param data 待加密数据 
         * @param password 密码 
         * @param salt 盐 
         * @return byte[] 加密数据 
         *  
         * */  
        public static byte[] encrypt(byte[] data,String password,byte[] salt) throws Exception{  
            //转换密钥  
            Key key=toKey(password);  
            //实例化PBE参数材料  
            PBEParameterSpec paramSpec=new PBEParameterSpec(salt,ITERATION_COUNT);  
            //实例化  
            Cipher cipher=Cipher.getInstance(ALGORITHM);  
            //初始化  
            cipher.init(Cipher.ENCRYPT_MODE, key,paramSpec);  
            //执行操作  
            return cipher.doFinal(data);  
        }  
        /** 
         * 解密 
         * @param data 待解密数据 
         * @param password 密码 
         * @param salt 盐 
         * @return byte[] 解密数据 
         *  
         * */  
        public static byte[] decrypt(byte[] data,String password,byte[] salt) throws Exception{  
            //转换密钥  
            Key key=toKey(password);  
            //实例化PBE参数材料  
            PBEParameterSpec paramSpec=new PBEParameterSpec(salt,ITERATION_COUNT);  
            //实例化  
            Cipher cipher=Cipher.getInstance(ALGORITHM);  
            //初始化  
            cipher.init(Cipher.DECRYPT_MODE, key,paramSpec);  
            //执行操作  
            return cipher.doFinal(data);  
        }  
        /** 
         * 使用PBE算法对数据进行加解密 
         * @throws Exception  
         *  
         */  
        public static void main(String[] args) throws Exception {  
            //待加密数据  
            String str="PBE";  
            //设定的口令密码  
            String password="azsxdc";  
              
            System.out.println("原文:/t"+str);  
            System.out.println("密码:/t"+password);  
              
            //初始化盐  
            byte[] salt=PBECoder.initSalt();  
            System.out.println("盐:/t"+Base64.encodeBase64String(salt));  
            //加密数据  
            byte[] data=PBECoder.encrypt(str.getBytes(), password, salt);  
            System.out.println("加密后:/t"+Base64.encodeBase64String(data));  
            //解密数据  
            data=PBECoder.decrypt(data, password, salt);  
            System.out.println("解密后:"+new String(data));  
        }  
    }  
    控制台结果输出:  
    原文: PBE  
    密码: azsxdc  
    盐:  VeEQqRzOw2Y=  
    加密后:    7bQTon5WD04=  
    解密后:PBE  
分享到:
评论

相关推荐

    PBE是一种基于口令的加密算法,使用口令代替其他对称加密算法中的密钥,其特点在于口令由用户自己掌管,不借助任何物理媒体;

    PBE算法是对称加密算法的综合算法,常见算法PBEWithMD5AndDES,使用MD5和DES算法构建了PBE算法。将盐附加在口令上,通过消息摘要算法经过迭代获得构建密钥的基本材料,构建密钥后使用对称加密算法进行加密解密。 ...

    OpenSSL对称加密算法中如何添加新算法

    OpenSSL 对称加密算法中如何添加新算法 OpenSSL 是一个开源的加密算法库,它提供了对称加密算法、非对称加密算法、哈希算法等多种加密算法。OpenSSL 的对称加密算法中可以添加新算法,以满足不同的加密需求。下面...

    Java十大加密算法(对称与非对称)

    7. **PBE(Password-Based Encryption)**:基于密码的加密,通常结合盐值和迭代次数,用于存储密码。PBEUtil.java可能涉及PBE算法,用于加密敏感信息,如用户密码。 8. **RC4**:RC4是一种流式加密算法,对称加密...

    ava加密解密 DES PBE RSA DH DSA ECC 等算法

    2. **PBE(Password-Based Encryption)**:基于密码的加密,通常结合PBKDF2(Password-Based Key Derivation Function 2)算法来增强安全性。使用`Cipher`类,并指定相应的密钥派生算法,如`PBEKeySpec`和`...

    JAVA加密和解密的艺术(第二版).zip

    在实际应用部分,书中的源代码部分(Java加密与解密的艺术--源代码.rar)提供了详细的示例,覆盖了SSL/TLS协议的实现,网络通信的安全,以及PBE(Password-Based Encryption)和PKCS#7等标准的使用。这些代码实例...

    c#加密解密之口令加密Exe源码.rar

    C#支持多种加密算法,如对称加密(如AES、DES、3DES)、非对称加密(如RSA、DSA)和哈希函数(如MD5、SHA1、SHA256)。其中,对称加密速度快,适合大量数据的加密;非对称加密安全性高,但速度较慢,常用于密钥交换...

    java 对称加密算法实现详解

    Java 中有多种对称加密算法,包括 DES、3DES、AES、PBE 等。下面我们将详细介绍这些算法的实现。 一、DES 算法 DES(Data Encryption Standard)是一种对称加密算法,使用 56 位密钥进行加密和解密。Java 中可以...

    bctls-jdk15on-164.zip

    此外,它还提供了PBE(Password-Based Encryption)和PBKDF2(Password-Based Key Derivation Function 2)等密码基础架构,用于基于密码的加密和密钥派生。 总结,Bouncy Castle 1.64 API是一个强大而全面的加密库...

    org.bouncycastle完整资源包

    3. **密钥管理**:支持PKCS#8和PKCS#12格式的密钥存储,允许用户管理和导出加密密钥,同时支持PBE(基于口令的加密)算法,便于安全存储和恢复加密密钥。 4. **asn.1编码解码**:ASN.1(抽象语法标记一号)是定义...

    openssl密钥生成工具

    在加密领域,公钥和私钥是基于非对称加密技术的核心概念。非对称加密允许用户拥有两个密钥:一个公钥和一个私钥。公钥可以公开分享,用于加密数据;而私钥必须保密,用于解密由公钥加密的数据。这种机制为网络通信...

    密码

    8. **Password-Based Encryption(PBE)**:基于口令的加密,允许使用用户密码生成加密密钥,但需要注意的是,口令必须安全存储,通常会用哈希函数和盐值加强。 9. **Java Cryptography API (JCA) 和 JCE**:JCA是...

Global site tag (gtag.js) - Google Analytics