一)对称加密-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处理后进行传输。
高级加密标准(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处理后进行传输。