`
sillycat
  • 浏览: 2542839 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

bouncycastle(3)Learn from others DES

    博客分类:
  • JAVA
 
阅读更多
bouncycastle(3)Learn from others DES

DES - Data Encryption Standard
The most important parameters are as follow: Key, Data, Mode.
A will create the key, publish the key to B, create the encryption data with key, publish the data to B
B will receive the key and the data, decrypt the data with key.

The most import class is as follow:
package com.sillycat.easycastle.encryption;

import java.security.Key;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

public abstract class DESCoder extends Coder {

     /**
      * ALGORITHM
      * we can change the algorithm to every value as follow,
      * the key size will change according to the algorithm you choose
      * <pre>
      * DES                  key size must be equal to 56
      * DESede(TripleDES)    key size must be equal to 112 or 168
      * AES                  key size must be equal to 128, 192 or 256,but 192 and 256 bits may not be available
      * Blowfish             key size must be multiple of 8, and can only range from 32 to 448 (inclusive)
      * RC2                  key size must be between 40 and 1024 bits
      * RC4(ARCFOUR)         key size must be between 40 and 1024 bits
      * </pre>
      */
     public static final String ALGORITHM = "DES";

     /**
      * convert to key
      * @param key
      * @return
      * @throws Exception
      */
     private static Key toKey(byte[] key) throws Exception {
          DESKeySpec dks = new DESKeySpec(key);
          SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
          SecretKey secretKey = keyFactory.generateSecret(dks);

          // If we want to use other algorithm as AES,Blowfish, Just use the follow statement
          // SecretKey secretKey = new SecretKeySpec(key, ALGORITHM);

          return secretKey;
     }

     /**
      * decrypt the data
      * @param data
      * @param key
      * @return
      * @throws Exception
      */
     public static byte[] decrypt(byte[] data, String key) throws Exception {
          Key k = toKey(decryptBASE64(key));

          Cipher cipher = Cipher.getInstance(ALGORITHM);
          cipher.init(Cipher.DECRYPT_MODE, k);

          return cipher.doFinal(data);
     }

     /**
      * encrypt
      *
      * @param data
      * @param key
      * @return
      * @throws Exception
      */
     public static byte[] encrypt(byte[] data, String key) throws Exception {
          Key k = toKey(decryptBASE64(key));
          Cipher cipher = Cipher.getInstance(ALGORITHM);
          cipher.init(Cipher.ENCRYPT_MODE, k);

          return cipher.doFinal(data);
     }

     /**
      * generate the key
      *
      * @return
      * @throws Exception
      */
     public static String initKey() throws Exception {
          return initKey(null);
     }

     /**
      * generate the key
      *
      * @param seed
      * @return
      * @throws Exception
      */
     public static String initKey(String seed) throws Exception {
          SecureRandom secureRandom = null;

          if (seed != null) {
               secureRandom = new SecureRandom(decryptBASE64(seed));
          } else {
               secureRandom = new SecureRandom();
          } 
        

          KeyGenerator kg = KeyGenerator.getInstance(ALGORITHM);
          kg.init(secureRandom);

          SecretKey secretKey = kg.generateKey();

          return encryptBASE64(secretKey.getEncoded());
     }

}


And the test class is as follow:
package com.sillycat.easycastle.encryption;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class DESCoderTest {

     @Test
     public void test() throws Exception {
          String inputStr = "DES";
          String key = DESCoder.initKey();
          System.out.println("original:\t" + inputStr);

          System.out.println("key:\t" + key);
 
          byte[] inputData = inputStr.getBytes();
          inputData = DESCoder.encrypt(inputData, key);
        System.out.println("encryption data:\t" + inputData);
          System.out.println("encryption data(base64+des):\t" + DESCoder.encryptBASE64(inputData));

          byte[] outputData = DESCoder.decrypt(inputData, key);
          String outputStr = new String(outputData);

          System.out.println("decryption data:\t" + outputStr);

          assertEquals(inputStr, outputStr);
     }

}


This project is host by github and project name is easycastle.


references:
http://snowolf.iteye.com/blog/380034


分享到:
评论

相关推荐

    BouncyCastle依赖.zip

    1. **bcprov-jdk15on-1.62.jar**:这是BouncyCastle的主要加密提供者包,提供了广泛的加密算法实现,如RSA、AES、DES、SHA等。它支持Java 1.5及更高版本,因此名称中的"jdk15on"表示这个版本适用于Java 1.5及以上。...

    bouncycastle jar包

    1. **对称加密**:AES(高级加密标准)、DES(数据加密标准)、3DES(三重DES)、Blowfish等。 2. **非对称加密**:RSA、DSA(数字签名算法)、ECC(椭圆曲线加密)等。 3. **哈希函数**:MD5、SHA-1、SHA-256、SHA-...

    BouncyCastle.Crypto.dll

    BouncyCastle.Crypto.dll是一个开源的加密库,由The Legion of the Bouncy Castle组织开发,提供了大量加密算法和协议的实现,包括但不限于RSA、AES、DES、DH(Diffie-Hellman)、ECC(椭圆曲线密码学)等。...

    org.bouncycastle 加密算法包 最新1.69版

    对称加密是使用同一密钥进行加密和解密的方法,如 DES(Data Encryption Standard)、3DES、AES(Advanced Encryption Standard)等。Bouncy Castle 提供了这些算法的实现,允许开发者在应用中方便地集成数据保护。...

    BouncyCastle.Crypto.dll 版本1.8.6 C#语言

    这个库是BouncyCastle项目的一部分,它是一个开源的密码学API,支持多种加密算法和标准,如RSA、AES、DES、SHA、HMAC等。BouncyCastle库分为两个部分:轻量级加密API(Lightweight Cryptography API)和PKCS(Public...

    BouncyCastle.dll C#依赖工具,用作数据的加解密辅助类

    3. **数字签名**:Bouncy Castle可以创建和验证数字签名,这在确保数据完整性和来源验证时非常有用。RSA、DSA和ECC都可以用于生成数字签名。 4. **哈希函数**:哈希函数将任意长度的输入转换为固定长度的输出,常...

    BouncyCastle.Crypto.dll 版本1.8.1

    2. **广泛的密码学算法**:BouncyCastle 支持众多加密算法,如AES、DES、3DES、Blowfish、RSA、DSA、ECDSA等,还包括哈希函数如SHA-1、SHA-256、MD5等,以及消息认证码(MAC)和伪随机数生成器(PRNG)。 3. **PKCS...

    BouncyCastle.Crypto.rar

    BouncyCastle.Crypto.dll是.NET版本的核心组件,包含了大量加密算法的实现,如对称加密(如AES、DES、3DES)、非对称加密(RSA、DSA、ECC)、哈希算法(MD5、SHA-1、SHA-256等)以及消息认证码(MAC)等。...

    BouncyCastle.Crypto.dll 1.8.2

    3. 密钥管理:对于密钥生成、存储和分发,BouncyCastle.Crypto.dll提供了完整的解决方案,包括硬件安全模块(HSM)的接口,确保密钥的安全管理。 五、总结 BouncyCastle.Crypto.dll 1.8.2版本是.NET开发者进行安全...

    Bouncy Castle 1.64 API及制作工具

    Bouncy Castle 支持多种加密算法,包括对称加密(如 AES、DES、3DES)、非对称加密(RSA、DSA、ECDSA)、哈希函数(MD5、SHA-1、SHA-256 及以上)、消息认证码(MAC)等。这些算法的实现使得开发人员能够灵活选择...

    bouncycastle1.59 帮助文档(包含html源文件制作工具)

    《BouncyCastle1.59帮助文档:深入理解与CHM制作详解》 BouncyCastle,作为Java和.NET平台上广泛使用的开源加密库,为开发者提供了丰富的加密算法、密码学标准接口以及证书处理功能。这份“BouncyCastle1.59帮助...

    bouncycastle集合包

    3. **bouncycastle.jar**:这个文件没有明确的版本号和平台标识,可能是通用或者特定版本的别名。通常,BouncyCastle的jar文件会包含一个版本号,所以这可能是某个特定构建的打包文件,或者是一个较早时期命名的习惯...

    org.bouncycastle完整资源包

    1. **加密算法支持**:`org.bouncycastle`提供了大量的对称和非对称加密算法,例如AES(高级加密标准)、Blowfish、DES(数据加密标准)、3DES(三重DES)、RSA(公钥加密标准)、DSA(数字签名算法)等。...

    BouncyCastle,SM2、SM3、SM4 证书加解密应用例子

    总结来说,"BouncyCastle,SM2、SM3、SM4 证书加解密应用例子"是一个关于使用C#和BouncyCastle库实现中国国密标准的实战案例,适用于需要跨平台、高安全性的应用程序。通过理解和应用这个示例,开发者可以增强在密码...

    BouncyCastle.Crypto.dllC#下的BouncyCastle

    BouncyCastle是JAVA专属库,但出来了C#的库。这个非常实用。仅仅一个dll文件

    C# BouncyCastle实现带原文数据PKCS#7 签名

    3. 创建Signer:BouncyCastle中的`Org.BouncyCastle.Security.SignerUtilities`类提供了一个静态方法`GetSigner`,可以根据所选算法(如SHA256WithRSA)获取一个`ISigner`实例,这个实例负责实际的签名计算。...

    C# BouncyCastle实现带原文数据PKCS#7 签名、验签

    在C#编程环境中,虽然.NET框架提供了内置的安全类如RSACryptoServiceProvider,但在某些场景下,如与Java平台交互或者需要更灵活的加密库时,可能会选择第三方库,例如BouncyCastle。BouncyCastle是一个强大的开源...

Global site tag (gtag.js) - Google Analytics