`
Darar
  • 浏览: 87844 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AES CBC加密

 
阅读更多

 import javax.crypto.Cipher;  
 import javax.crypto.spec.IvParameterSpec;  
 import javax.crypto.spec.SecretKeySpec;  
   
 import sun.misc.BASE64Decoder;  
 import sun.misc.BASE64Encoder;  
   
 /******************************************************************************* 
  * AES加解密算法 
  *  
  * @author arix04 
  *  
  */  
   
 public class AES {  
   
     // 加密  
     public static String Encrypt(String sSrc, String sKey) throws Exception {  
         if (sKey == null) {  
             System.out.print("Key为空null");  
             return null;  
         }  
         // 判断Key是否为16位  
         if (sKey.length() != 16) {  
             System.out.print("Key长度不是16位");  
             return null;  
         }  
         byte[] raw = sKey.getBytes();  
         SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");  
         Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//"算法/模式/补码方式"  
         IvParameterSpec iv = new IvParameterSpec("0304050607080910".getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度  
         cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);  
         byte[] encrypted = cipher.doFinal(sSrc.getBytes());  
   
         return new BASE64Encoder().encode(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。  
     }  
   
     // 解密  
     public static String Decrypt(String sSrc, String sKey) throws Exception {  
         try {  
             // 判断Key是否正确  
             if (sKey == null) {  
                 System.out.print("Key为空null");  
                 return null;  
             }  
             // 判断Key是否为16位  
             if (sKey.length() != 16) {  
                 System.out.print("Key长度不是16位");  
                 return null;  
             }  
             byte[] raw = sKey.getBytes("ASCII");  
             SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");  
             Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");  
             IvParameterSpec iv = new IvParameterSpec("0304050607080910".getBytes());  
             cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);  
             byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);//先用base64解密  
             try {  
                 byte[] original = cipher.doFinal(encrypted1);  
                 String originalString = new String(original);  
                 return originalString;  
             } catch (Exception e) {  
                 System.out.println(e.toString());  
                 return null;  
             }  
         } catch (Exception ex) {  
             System.out.println(ex.toString());  
             return null;  
         }  
     }  
   
     public static void main(String[] args) throws Exception {  
         /* 
          * 加密用的Key 可以用26个字母和数字组成,最好不要用保留字符,虽然不会错,至于怎么裁决,个人看情况而定 
          * 此处使用AES-128-CBC加密模式,key需要为16位。 
 */  
         String cKey = "1234567890123456";  
         // 需要加密的字串  
         String cSrc = "Email : arix04@xxx.com";  
         System.out.println(cSrc);  
         // 加密  
         long lStart = System.currentTimeMillis();  
         String enString = AES.Encrypt(cSrc, cKey);  
         System.out.println("加密后的字串是:" + enString);  
   
         long lUseTime = System.currentTimeMillis() - lStart;  
         System.out.println("加密耗时:" + lUseTime + "毫秒");  
         // 解密  
         lStart = System.currentTimeMillis();  
         String DeString = AES.Decrypt(enString, cKey);  
         System.out.println("解密后的字串是:" + DeString);  
         lUseTime = System.currentTimeMillis() - lStart;  
         System.out.println("解密耗时:" + lUseTime + "毫秒");  
     }  
 }
 
分享到:
评论

相关推荐

    QT AES CBC加密和解密

    在QT中实现AES CBC加密和解密,我们需要以下步骤: 1. **导入必要的库**:首先,我们需要包含QT的加密库`#include <QtCrypto>`,这个库提供了QCA(Qt Cryptography Architecture)模块,支持多种加密算法,包括AES...

    QT下AES CBC加密例子程序

    QT框架下的AES CBC加密是一种广泛应用于数据保护的技术,它结合了高效的安全算法和一种模式来确保数据的机密性。AES(Advanced Encryption Standard)是美国国家标准技术研究所(NIST)制定的一种高级加密标准,用于...

    微信小程序 AES CBC加密源码js

    微信小程序 AES CBC加密源码js微信小程序 AES CBC加密源码js

    js非对称加密-aescbc加密方式

    aescbc加密 代码片段 function getScrKey(pubExponent,modulus,srcStr){ var publicKey = RSAUtils.getKeyPair(pubExponent, '', modulus); var enStr = RSAUtils.encryptedString(publicKey, srcStr); ...

    C++ AES cbc加密 带iv向量 绝对可用

    本教程将详细解释C++中使用AES CBC模式进行加密的方法,并结合openssl库进行实践。 AES,即高级加密标准,是由NIST(美国国家标准与技术研究所)于2001年制定的一种块密码算法,取代了之前的DES(Data Encryption ...

    java实现aes-cbc模式加密

    java实现aes加密,采用cbc模式,PKCS5Padding填充,key ALLINPAYRISKERR0,偏移量IV 0000000000000000,hex输出 。

    基于Java实现的离线记录密码AES CBC加密器设计源码

    该项目是一款基于Java语言的密码加密器,采用AES CBC加密算法实现离线记录密码功能,源代码包含48个文件,其中包括30个Java类文件、10个Java源文件、2个Git忽略文件、2个XML配置文件以及2个Markdown文件等。...

    CBC-AES的加密算法的实现

    使用`AES_set_encrypt_key()`函数来设置密钥,`AES_cbc_encrypt()`函数用于执行CBC加密。 3. **CBC模式**: 在CBC模式下,每个明文块首先与上一个密文块异或,然后用密钥加密。第一个明文块会与IV异或,因为没有前一...

    在Qt下实现的AES-128 CBC模式的加密解密

    接下来,我们需要创建一个实现AES-128 CBC加密的函数,使用QDataStream处理输入的QByteArray: ```cpp QByteArray encryptAES128CBC(QByteArray plaintext, QByteArray key, QByteArray iv) { // 创建加密器 ...

    AES加密128位(16字节)CBC

    c# AES加密128位(16字节)CBC模式 NOPadding 网上代码好少16进制的所有贡献给大家

    AES_CBC.zip_AES_CBC.zip_cbc_cbc加密_ship5vd_基于CBC的AES

    标题中的"AES_CBC.zip_AES_CBC.zip_cbc_cbc加密_ship5vd_基于CBC的AES"表明这个压缩包文件主要涉及的是AES(Advanced Encryption Standard)加密算法,并且使用了CBC(Cipher Block Chaining)模式。AES是一种广泛...

    AES CBC加解密源源代码

    总之,这个资源提供了基于VC6.0的AES CBC加密解密源码,可以帮助开发者理解和实现AES加密算法,同时通过"AesTest"进行功能验证,确保代码的正确性。对于需要在C++环境中实现AES加密解密的项目,这是一个宝贵的参考...

    AES加密解密 JS html 前端

    总结来说,JS前端实现AES-CBC加密解密,主要依赖于如crypto-js这样的第三方库,通过设置密钥、初始向量和填充方式,可以有效地保护敏感数据。在实际应用中,注意密钥的管理和传递,确保安全性。同时,前端加密仅提供...

    aes_cbc.rar_aes cbc_aes_cbc_creation

    2. `aes_cbc.c`:这是另一个C语言源文件,很可能是实现AES CBC加密算法的核心代码。它可能包含了初始化密钥、执行加密和解密操作的函数。在UBI设备中使用AES CBC,可能是为了在存储或传输数据时对其进行加密,防止...

    AES CBC加解密源代码

    在提供的源代码中,`AesCBC.h`和`AesCBC.cpp`文件包含了AES CBC模式的实现,支持128位、192位和256位的密钥长度。这些文件可能包含以下功能: 1. 密钥扩展:AES的密钥扩展算法会根据输入的原始密钥生成一系列轮密钥...

    AES的C#实现(用ECB和CBC模式分别完成加密解密)

    AES,即高级加密标准(Advanced Encryption Standard),是一种广泛使用的对称加密算法,具有高安全性、高效性和灵活性。在C#编程环境中,我们可以利用.NET框架提供的System.Security.Cryptography命名空间中的类来...

    AES-128-CBC加密解密

    在Java中实现AES-128-CBC加密解密,你需要以下关键步骤: 1. 导入必要的库:`javax.crypto.Cipher`,`java.security.SecureRandom`,`java.util.Base64`等。 2. 创建密钥:首先,你需要一个128位的密钥。可以使用`...

Global site tag (gtag.js) - Google Analytics