您的位置:首页 > 编程语言 > Java开发

java中常用的加密方式

2014-12-20 21:43 393 查看
一)对称加密-AES

高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位。

在应用方面,尽管DES在安全上是脆弱的,但由于快速DES芯片的大量生产,使得DES仍能暂时继续使用,为提高安全强度,通常使用独立密钥的三级DES(3des加密)。但是DES迟早要被AES代替。流密码体制较之分组密码在理论上成熟且安全,但未被列入下一代加密标准. 

java中aes的粗略实现:

1)创建加密对象

        AesDataRsaKeyCryptoStyle mInstance = new AesDataRsaKeyCryptoStyle();

2)初始化

        keyGen=KeyGenerator.getInstance("AES");

        keyGen.init(128);

        cipher=Cipher.getInstance(algorithmStr);

3)生成加密密匙

        Key key=new SecretKeySpec(keyBytes,"AES");

4)加密

        cipher.init(Cipher.ENCRYPT_MODE, key);

        encryptedText=cipher.doFinal(content);  

二)非对称加密算法-RSA

Rsa是常用的非对称加密算法一种,它需要两个密钥:公钥和私钥,公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公钥加密方法相结合的方式,即信息采用改进的DES或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。

java实现粗略加密流程: 

1)实例化Rsa mRsa = new Rsa()对象;

2)获取公钥:

            X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);

            KeyFactory keyFactory = KeyFactory.getInstance("RSA");

            PublicKey publicKey = keyFactory.generatePublic(keySpec);

3)进行加密:

            Cipher cipher = Cipher.getInstance(ALGORITHM);

            cipher.init(Cipher.ENCRYPT_MODE, key);

            byte[] b = source.getBytes();

            byte[] b1 = cipher.doFinal(b);

            return new String(Base64.encodeBase64(b1), "GBK");

java实现粗略解密流程:

1)获取私匙:

            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);

            KeyFactory keyFactory = KeyFactory.getInstance("RSA");

            PrivateKey privateKey = keyFactory.generatePrivate(keySpec);

2)用私匙解密:

            Cipher cipher = Cipher.getInstance(ALGORITHM);

            cipher.init(Cipher.DECRYPT_MODE, key);

            byte[] b1 = Base64.decodeBase64(cryptograph.getBytes());

            byte[] b = cipher.doFinal(b1);

            return new String(b);

三)3DES加密

3des加密(对称加密),又称为Triple DES加密,它不是一种新的块加密算法,它相当于对数据块进行了3次Des加密,每条密匙长度为56位。三条密匙K1、K2、K3决定了算法的安全性,若三个密钥互不相同,本质上就相当于用一个长为56*3位的密钥进行加密。多年来,它在对付强力攻击时是比较安全的。若数据对安全性要求不那么高,K1可以等于K3。在这种情况下,密钥的有效长度为112位.

加密流程如下:

      1)实例化加密对象TripleDes  mInstance = new TripleDes();

      2)使用指定的key来生成证书的公钥和随机源初始化生成的实例

            SecureRandom mSecureRandom = new SecureRandom();

            DESedeKeySpec dks = new DESedeKeySpec(key);

            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES3_ALGORITHM);

            SecretKey mSecurekey = keyFactory.generateSecret(dks);

            mCipher = Cipher.getInstance(DES3_ALGORITHM);

      3)使用TripleDes加密数据

4)在数据交互过程中,3des加密后的数据有时会出现空格,为了数据的完整性,最好将加密后的数据进行Base64处理后进行传输。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  加密 java 安全 base64