几种加密算法的测试,包括对称加密和非对称加密

 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     }

    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     }

    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     }

    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     }

非对称加密算法

  1. 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     }
时间: 2024-10-05 17:25:59

几种加密算法的测试,包括对称加密和非对称加密的相关文章

最全加密算法之对称加密和非对称加密

常见加密算法 : DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合: 3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高: RC2和 RC4:用变长密钥对大量数据进行加密,比 DES 快: IDEA(International Data Encryption Algorithm)国际数据加密算法:使用 128 位密钥提供非常强的安全性: RSA:由 RSA 公司发明,是一个支持变长密钥的公共

对称加密与非对称加密

(一)对称加密(Symmetric Cryptography) 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key).对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中. 对称加密通常使用的是相对较小的密钥,一般小于256 bit.因为密钥越大,加密越强,但加密与解密的过程越慢.如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解:但如果你的密钥有1 MB

第10章 网络安全(1)_对称加密和非对称加密

1 网络安全概述 1.1 计算机网络面临的安全威协 (1)截获:攻击者从网络上窃听他人的通信内容,通常把这类攻击称为"截获".在被动攻击中,攻击者只是观察和分析某一个协议数据单元(PDU)而不干扰信息流. (2)篡改:攻击者篡改网络上传递的报文.这里包括彻底中断传递的报文,甚至把完全伪造的报文传送给接收方,这种攻击也有时也称为"更改报文流".如DNS劫持(域名劫持),安装黑客软件Cain可以进行验证. (3)恶意程序:是一种特殊的主动攻击形式.如计算机病毒.蠕虫.木

安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS

一,对称加密 所谓对称加密,就是它们在编码时使用的密钥e和解码时一样d(e=d),我们就将其统称为密钥k. 对称加解密的过程如下: 发送端和接收端首先要共享相同的密钥k(即通信前双方都需要知道对应的密钥)才能进行通信.发送端用共享密钥k对明文p进行加密,得到密文c,并将得到的密文发送给接收端,接收端收到密文后,并用其相同的共享密钥k对密文进行解密,得出明文p. 一般加密和解密的算法是公开的,需要保持隐秘的是密钥k,流行的对称加密算法有:DES,Triple-DES,RC2和RC4 对称加密的不足

概念解释:对称加密、非对称加密、公钥、私钥、签名、证书

楔子 现在网络的安全性已经变得越来越重要,各位程序员在开发过程中或多或少都会遇到公钥.私钥.加密.签名等一些相关名词.这些概念比较杂乱,容易混淆,下面就来梳理一下这部分的内容. 对称加密 在重要的信息的传递过程中,人们总是希望信息不会被偷看.不会被篡改,伪造等.为了达到这个要求人们一直在不断努力着. 电报加密使用的密码本,就是初代网络安全所使用的加密方式,用法为:发信时将内容翻译为密文发出,收到电报的一方,使用相同的密码本才能解密出正确的信息,否则看到的就是一堆乱码. 这种传统的加密方式就叫做对

对称加密和非对称加密的比较

对称加密: 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,而且对计算机功能要求也没有那么高.IDEA加密标准由PGP(PrettyGood Privacy)系统使用. 对称加密算法在电子商务交易过程中存在几个问题: 1.要求提供一条安全的渠道使通讯双方

对称加密与非对称加密 浅析

对称加密 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key).对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中. 对称加密通常使用的是相对较小的密钥,一般小于256 bit.因为密钥越大,加密越强,但加密与解密的过程越慢.如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解:但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费

对称加密与非对称加密各自的应用场景

强推:推荐一篇通俗易懂的对称加密和非对称加密的文章:https://segmentfault.com/a/1190000004461428 推荐一篇文章:对称加密算法与非对称加密算法的优缺点:https://zhuanlan.zhihu.com/p/38307899 1.对称加密 2.非对称加密 原文地址:https://www.cnblogs.com/zkfopen/p/10261247.html

你知道,HTTPS用的是对称加密还是非对称加密?

1.引言 随着互联网安全意识的普遍提高,对安全要求稍高的应用中,HTTPS的使用是很常见的,甚至在1年前,苹果公司就将使用HTTPS作为APP上架苹果应用市场的先决条件之一(详见<苹果即将强制实施 ATS,你的APP准备好切换到HTTPS了吗?>一文). 所以,无论是即时通讯IM还是其它应用,在网络安全意识增强的今天,很多场景下使用HTTPS是肯定没错的.对于即时通讯IM的开发人员来说,长连接用TLS这没疑问,短连接用HTTPS也没问题,但我想问你一个最基础的面视问题:HTTPS到底用的是对称

探究公钥、私钥、对称加密、非对称加密、hash加密、数字签名、数字证书、CA认证、https它们究竟是什么,它们分别解决了通信过程的哪些问题。

一.准备 1. 角色:小白.美美.小黑. 2. 剧情:小白和美美在谈恋爱:小黑对美美求而不得.心生怨念,所以从中作梗. 3. 需求:小白要与美美需通过网络进行通信,联络感情,所以必须保证通信的安全性. 二.由通信过程中可能出现的问题来引出公钥.私钥.对称加密.非对称加密.hash加密.数字签名.数字证书.CA认证.https的相关知识 1. 场景1: 小白和美美在 http 协议下进行通信. 1.1 能否完成通信:能. 1.2 还可能出现其他问题:容易受到网络中间人攻击:在http协议下进行通信