展会信息港展会大全

几种加密算法的测试,包括对称加密和非对称加密
来源:互联网   发布日期:2012-12-23 14:47:18   浏览:8728次  

导读:对称加密算法 Blowfish 加密解密 Blowfish 加密算法介绍:BlowFish是对称加密算法的其中一种,加密后的数据是可逆的。由于BlowFish加密/解密速度快,更重要的是任何人都可以免费使用不需要缴纳版权费,所以有不少游戏都采用BlowFish加密资源文件数据。BlowFis...

对称加密算法

  Blowfish 加密解密

Blowfish 加密算法介绍:BlowFish是对称加密算法的其中一种,加密后的数据是可逆的。由于BlowFish加密/解密速度快,更重要的是任何人都可以免费使用不需要缴纳版权费,所以有不少游戏都采用BlowFish加密资源文件数据。BlowFish 每次只能加密和解密8字节数据,加密和解密的过程基本上由ADD和XOR指令运算组成,所以速度非常快。

Blowfish 加密算法实现

1 /**

2 * Blowfish加密

3 *

4 * @param text 需要加密的数据

5 * @param privateKey 加密密钥

6 * @return

7 */

8 public static String f_EnBlowfish(String text, String privateKey)

9 {

10 byte[] cifrado1 = null;

11 byte[] cifrado2 = null;

12 byte[] mensaje = text.getBytes();

13 try

14 {

15 Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

16 byte[] keys = privateKey.getBytes();

17 SecretKeySpec sk = new SecretKeySpec(keys, "Blowfish");

18 Date inic = new Date();

19 // 加密

20 Cipher c1 = Cipher.getInstance("Blowfish", "BC");

21 c1.init(Cipher.ENCRYPT_MODE, sk);

22 cifrado1 = c1.doFinal(mensaje, 0, mensaje.length);

23 }

24 catch (Exception e)

25 {

26 e.printStackTrace();

27 }

28 return Usual.f_toBase64String(cifrado1);

29 }

30 /**

31 * Blowfish解密

32 *

33 * @param text 需要解密的数据

34 * @param privateKey 加密密钥

35 * @return

36 */

37 public static String f_DeBlowfish(String enText, String privateKey)

38 {

39 byte[] cifrado1 = null;

40 byte[] cifrado2 = null;

41 try

42 {

43 Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

44 byte[] keys = privateKey.getBytes();

45 SecretKeySpec sk = new SecretKeySpec(keys, "Blowfish");

46 // 解密

47 // 将加密后的数据转为byte

48 cifrado1 = Usual.f_fromBase64String(enText);

49 Cipher c2 = Cipher.getInstance("Blowfish", "BC");

50 c2.init(Cipher.DECRYPT_MODE, sk);

51 cifrado2 = c2.doFinal(cifrado1, 0, cifrado1.length);

52 }

53 catch (Exception e)

54 {

55 e.printStackTrace();

56 }

57 return new String(cifrado2, Charset.forName("gb2312"));

58 }

#p#副标题#e#

Rijndael 加密解密

Rijndael 是带有可变块长和可变密钥长度的迭代块密码。块长和密钥长度可以分别指定成 128、192 或 256 位。

Rijndael 加密算法实现

1 /**

2 * Rijndael加密

3 *

4 * @param text 需要加密的数据

5 * @param privateKey 加密密钥

6 * @return

7 */

8 public static String f_EnRijndael(String text, String privateKey)

9 {

10 byte[] cifrado1 = null;

11 byte[] cifrado2 = null;

12 byte[] mensaje = text.getBytes();

13 byte[] keys = privateKey.getBytes();

14 // 位数限制问题

15 // http://search.oracle.com/search/search?start=1&search_p_main_operator=all&q=Java+Cryptography+Extension+&group=Technology+Network

16 SecretKeySpec sk = new SecretKeySpec(keys, "Rijndael");

17 Date inic = new Date();

18 try

19 {

20 Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

21 Cipher c1 = Cipher.getInstance("Rijndael", "BC"); // 有可能出现 java.security.NoSuchAlgorithmException异常,使用下面一句试试

22 // Cipher c1 = Cipher.getInstance("Rijndael/ECB/PKCS7Padding", "BC");

23 c1.init(Cipher.ENCRYPT_MODE, sk);

24 // 加密

25 cifrado1 = c1.doFinal(mensaje, 0, mensaje.length);

26 }

27 catch (Exception e)

28 {

29 e.printStackTrace();

30 }

31 return Usual.f_toBase64String(cifrado1);

32 }

33 /**

34 * Rijndael解密

35 * @param enText 需要解密的数据

36 * @param privateKey 加密密钥

37 * @return

38 */

39 public static String f_DeRijndael(String enText, String privateKey)

40 {

41 byte[] cifrado1 = null;

42 byte[] cifrado2 = null;

43 byte[] keys = privateKey.getBytes();

44 // 位数限制问题

45 // http://search.oracle.com/search/search?start=1&search_p_main_operator=all&q=Java+Cryptography+Extension+&group=Technology+Network

46 SecretKeySpec sk = new SecretKeySpec(keys, "Rijndael");

47 try

48 {

49 Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

50 Cipher c2 = Cipher.getInstance("Rijndael", "BC");

51 // Cipher c2 = Cipher.getInstance("Rijndael/ECB/", "BC");

52 // Cipher c2 = Cipher.getInstance("Rijndael/ECB/PKCS7Padding", "BC");

53 c2.init(Cipher.DECRYPT_MODE, sk);

54 // 将加密后的数据转为byte

55 cifrado1 = Usual.f_fromBase64String(enText);

56 // 解密

57 cifrado2 = c2.doFinal(cifrado1, 0, cifrado1.length);

58 }

59 catch (Exception e)

60 {

61 e.printStackTrace();

62 }

63 return new String(cifrado2, 0, cifrado2.length);

64 }

#p#副标题#e#

AES 加密解密

AES AES加密算法即密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。

AES 加密算法实现

1 /**

2 * AES加密

3 *

4 * @param mText 需要加密的数据

5 * @param privateKey 加密密钥

6 * @return

7 */

8 public static String f_EnAES(String mText, String privateKey)

9 {

10 // 注册BouncyCastleProvider,扩展RSA "BC"

11 if (Security.getProvider(new BouncyCastleProvider().getName()) == null)

12 {

13 Security.addProvider(new BouncyCastleProvider());

14 }

15 String enDataStr = Usual.mEmpty;

16 try

17 {

18 byte[] mKeys = privateKey.getBytes();

19 byte[] enData = BCVFactory

20 .enCrpytoSin(Usual.f_toBytes(mText), mKeys, "AES", "AES", "BC", Usual.mEmptyBytes);

21 enDataStr = Usual.f_toBase64String(enData);

22 System.out.println(enDataStr);

23 }

24 catch (Exception e)

25 {

26 System.out.println(e.getMessage());

27 }

28 return enDataStr;

29 }

30 /**

31 * AES解密

32 *

33 * @param mEnText 需要解密的数据

34 * @param privateKey 加密密钥

35 * @return

36 */

37 public static String f_DeAES(String mEnText, String privateKey)

38 {

39 // 注册BouncyCastleProvider,扩展RSA "BC"

40 if (Security.getProvider(new BouncyCastleProvider().getName()) == null)

41 {

42 Security.addProvider(new BouncyCastleProvider());

43 }

44 String deDataStr = Usual.mEmpty;

45 try

46 {

47 byte[] mKeys = privateKey.getBytes();

48 byte[] enData = Usual.f_fromBase64String(mEnText);

49 byte[] deData = BCVFactory.deCrpytoSin(enData, mKeys, "AES", "AES", "BC", Usual.mEmptyBytes);

50 deDataStr = Usual.f_fromBytes(deData);

51 }

52 catch (Exception e)

53 {

54 e.printStackTrace();

55 // TODO: handle exception

56 }

57 return deDataStr;

58 }

#p#副标题#e#

DESede 加密解密

DESede DESede即三重DES加密算法,也被称为3DES或者Triple DES。使用三(或两)个不同的密钥对数据块进行三次(或两次)DES加密(加密一次要比进行普通加密的三次要快)。三重DES的强度大约和112-bit的密钥强度相当。通过迭代次数的提高了安全性,但同时也造成了加密效率低的问题。

DESede 加密算法实现

1 /**

2 * DESede加密

3 * @param text 需要加密的数据

4 * @param privateKey 加密密钥

5 * @param args

6 */

7 public static String f_EnDESede(String text, String privateKey)

8 {

9 // 注册BouncyCastleProvider,扩展RSA "BC"

10 if (Security.getProvider(new BouncyCastleProvider().getName()) == null)

11 {

12 Security.addProvider(new BouncyCastleProvider());

13 }

14 try

15 {

16 byte[] mKeys = privateKey.getBytes();

17 byte[] enData = BCVFactory.enCrpytoSin(Usual.f_toBytes(text), mKeys, "CBC", "DESede/ECB/PKCS5Padding",

18 "BC", Usual.mEmptyBytes);

19 System.out.println(Usual.f_toBase64String(enData));

20 return Usual.f_toBase64String(enData);

21 }

22 catch (Exception e)

23 {

24 }

25 return null;

26 }

27 /**

28 * DESede解密

29 * @param mEntext 需要解密的数据

30 * @param privateKey 加密密钥

31 *

32 * @param args

33 */

34 public static String f_DeDESede(String mEntext, String privateKey)

35 {

36 // 注册BouncyCastleProvider,扩展RSA "BC"

37 if (Security.getProvider(new BouncyCastleProvider().getName()) == null)

38 {

39 Security.addProvider(new BouncyCastleProvider());

40 }

41 try

42 {

43 byte[] mKeys = privateKey.getBytes();

44 byte[] enData = Usual.f_fromBase64String(mEntext);

45 byte[] deData = BCVFactory.deCrpytoSin(enData, mKeys, "CBC", "DESede/ECB/PKCS5Padding", "BC",

46 Usual.mEmptyBytes);

47 return Usual.f_fromBytes(deData);

48 }

49 catch (Exception e)

50 {

51 }

52 return null;

53 }

#p#副标题#e#

非对称加密算法

RSA 非对称加密算法

RSA 加密算法是一种非对称加密算法。在公钥加密标准和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。尽管如此,只有一些RSA算法的变种被证明为其安全性依赖于因数分解。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。

RSA 加密算法实现

1 String Str = "我爱中国"; // 加密数据

2 KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");

3 keyPairGen.initialize(512); // 密钥位数

4 KeyPair keyPair = keyPairGen.generateKeyPair(); // 密钥对

5

6 PublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); // 公钥对象

7 PrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); // 私钥对象

8

9 String publicKeyString = RsaCrypto.f_getKeyString(publicKey); //公钥值

10 String privateKeyString = RsaCrypto.f_getKeyString(privateKey);//私钥值

11 String enString = RsaCrypto.enCryptoRSA(publicKeyString, Str); // 公钥加密,私钥解密

12 String dnString = RsaCrypto.deCryptoRSA(privateKeyString, enString);

13 System.out.println("原来的:" + Str + "解密后的 :" + dnString);

14 System.out.println("加密后的token" + enString);

1 /**

2 * 将密钥转换成Base64

3 * @param key 公钥、私钥对象

4 * @return 密钥转换成Base64String

5 * @throws UnsupportedEncodingException 编码错误

6 */

7 public static String f_getKeyString(Key key) throws UnsupportedEncodingException

8 {

9 byte[] keyBytes = key.getEncoded();

10 String s = Usual.mEmpty;

11 // s = (new BASE64Encoder()).encode(keyBytes);

12 // s = new String(Base64.encodeBase64(keyBytes), Usual.mUTF8Name);

13 s = new String(Base64.encode(keyBytes), Usual.mUTF8Name);

14 return s;

15 }

1 /**

2 * RSA 加密

3 *

4 * @param publicKeyString 公钥的Base64string

5 * @param provider 算法实现类库。为"",使用JDK的实现算法。"BC"使用的是bouncycastle

6 * @return 加密后的密文 Base64string

7 * @throws NoSuchAlgorithmException

8 * @throws NoSuchProviderException

9 * @throws NoSuchPaddingException

10 * @throws InvalidKeyException

11 * @throws IllegalBlockSizeException

12 * @throws BadPaddingException

13 * @throws UnsupportedEncodingException

14 * @throws InvalidKeySpecException

15 */

16 public static String enCryptoRSA(String publicKeyString, String text, String provider)

17 throws NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException, InvalidKeyException,

18 IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException, InvalidKeySpecException

19 {

20 // 私钥解密

21 PublicKey publicKey = f_getPublicKey(publicKeyString);

22 //加密

23 return enCryptoRSA(provider, text, publicKey);

24

25 }

1 /**

2 * RSA解密,扩展支持BC

3 *

4 * @param privateKeyString 私钥的Base64String

5 * @param enString 加密后的密文,并转成Base64String

6 * @return

7 * @throws BadPaddingException

8 * @throws IllegalBlockSizeException

9 * @throws NoSuchPaddingException

10 * @throws NoSuchProviderException

11 * @throws InvalidKeySpecException

12 * @throws NoSuchAlgorithmException

13 * @throws UnsupportedEncodingException

14 * @throws InvalidKeyException

15 */

16 public static String deCryptoRSA(String privateKeyString, String enString) throws InvalidKeyException, UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchProviderException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException

17 {

18 if (Security.getProvider(new BouncyCastleProvider().getName()) == null)

19 {

20 Security.addProvider(new BouncyCastleProvider());

21 }

22 return deCryptoRSA(privateKeyString, enString, "BC");

23 }


赞助本站

相关内容
AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港