1. 程式人生 > >DES加密解密->java實現

DES加密解密->java實現

DES加密解密涉及到的JAVA類

Cipher

此類為加密和解密提供密碼功能。它構成了 Java Cryptographic Extension (JCE) 框架的核心
為建立 Cipher 物件,應用程式呼叫 Cipher 的 getInstance 方法並將所請求轉換 的名稱傳遞給它。還可以指定提供者的名稱(可選)。
轉換 是一個字串,它描述為產生某種輸出而在給定的輸入上執行的操作(或一組操作)。轉換始終包括加密演算法的名稱(例如,DES),後面可能跟有一個反饋模式和填充方案。
轉換具有以下形式:
“演算法/模式/填充”或 “演算法”
(後一種情況下,使用模式和填充方案特定於提供者的預設值)。例如,以下是有效的轉換:
Cipher c = Cipher.getInstance(“DES/CBC/PKCS5Padding”);
使用 CFB 和 OFB 之類的模式,Cipher 塊可以加密單元中小於該 Cipher 的實際塊大小的資料。請求這樣一個模式時,可以指定一次處理的位數(可選):將此數新增到模式名稱中,正如 “DES/CFB8/NoPadding” 和 “DES/OFB32/PKCS5Padding” 轉換所示。如果未指定該數,則將使用特定於提供者的預設值。(例如,SunJCE 提供者對 DES 使用預設的 64 位)。因此,通過使用如 CFB8 或 OFB8 的 8 位模式,Cipher 塊可以被轉換為面向位元組的 Cipher 流。
這裡寫圖片描述


這裡寫圖片描述
這裡寫圖片描述

SecretKeyFactory

此類表示祕密金鑰的工廠。
金鑰工廠用來將金鑰(型別 Key 的不透明加密金鑰)轉換為金鑰規範(底層金鑰材料的透明表示形式),反之亦然。祕密金鑰工廠只對祕密(對稱)金鑰進行操作。
金鑰工廠為雙工模式,即其允許根據給定金鑰規範(金鑰材料)構建不透明金鑰物件,或以適當格式獲取金鑰物件的底層金鑰材料。
應用程式開發人員應參閱其提供者文件,找出 generateSecret 和 getKeySpec 方法所支援的金鑰規範。例如,”SunJCE” 提供者提供的 DES 祕密金鑰工廠支援 DESKeySpec 作為 DES 金鑰的透明表示形式,並且該提供者的 Triple DES 金鑰的祕密金鑰工廠支援 DESedeKeySpec 作為 Triple DES 金鑰的透明表示形式。
這裡寫圖片描述

KeySpec

public interface KeySpec組成加密金鑰的金鑰內容的(透明)規範。
如果金鑰儲存在硬體裝置上,則其規範可以包含有助於標識該裝置上的金鑰的資訊。
用特定於演算法的方法或獨立於演算法的編碼格式(例如,ASN.1)可以指定金鑰。例如,DSA 專用金鑰可以由其元件 x、p、q 和 g 指定(請參見 DSAPrivateKeySpec),或使用其 DER 編碼指定(請參見 PKCS8EncodedKeySpec)。
此介面不包含任何方法或常量。它僅用於將所有金鑰規範分組,併為其提供型別安全。所有金鑰規範都必須實現此介面。

在實現類中可以看到DESKeySpec。
這裡寫圖片描述

SecretKey

public interface SecretKeyextends Key祕密(對稱)金鑰。
此介面不包含方法或常量。其唯一目的是分組祕密金鑰(併為其提供型別安全)。
此介面的提供者實現必須改寫繼承自 java.lang.Object 的 equals 和 hashCode 方法,以便根據底層金鑰材料而不是根據引用進行祕密金鑰比較。
實現此介面的金鑰以其編碼格式(請參閱 getFormat)返回字串 RAW,並返回作為 getEncoded 方法呼叫結果的原始金鑰位元組。(getFormat 和 getEncoded 方法繼承自 java.security.Key 父介面。)
利用以下方法即可獲得祕鑰。

SecretKey secretKey = secretKeyFactory.generateSecret(keySpec);

然後利用cipher的init方法即可初始化cipher物件,進而可以進行加密和解密操作。

cipher.init(Cipher.ENCRYPT_MODE, secretKey,new SecureRandom());

實現類DESEncryptTools

package com.david.des;
import java.security.SecureRandom;
import java.security.spec.KeySpec;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

/**
 * 
 * 專案名稱:CipherTest   
 * 類  名  稱:AESEncryptTools   
 * 類  描  述:DES加密解密演算法
 * 創  建  人:david 
 * 建立時間:2016年5月2日 下午8:00:21   
 * Copyright (c) david-版權所有
 */
public final class DESEncryptTools {

    //加密算是是des
    private static final String ALGORITHM = "DES";
    //轉換格式
    private static final String TRANSFORMATION = "DES/ECB/PKCS5Padding";

    //利用8個位元組64位的key給src加密
    @SuppressWarnings("unused")
    public static byte[] encrypt(byte[] src,byte[]key)
    {
        try {
            //加密
            Cipher cipher = Cipher.getInstance(TRANSFORMATION);
            SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(ALGORITHM);
            KeySpec keySpec = new DESKeySpec(key);
            SecretKey secretKey = secretKeyFactory.generateSecret(keySpec);
            cipher.init(Cipher.ENCRYPT_MODE, secretKey,new SecureRandom());
            byte[] enMsgBytes = cipher.doFinal(src);    
            return enMsgBytes;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    //利用8個位元組64位的key給src解密
    @SuppressWarnings("unused")
    public static byte[] decrypt(byte[] encryptBytes,byte[]key){
        try {
            //解密
            //Cipher deCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
            Cipher deCipher = Cipher.getInstance(TRANSFORMATION);
            SecretKeyFactory deDecretKeyFactory = SecretKeyFactory.getInstance(ALGORITHM);
            KeySpec deKeySpec = new DESKeySpec(key);
            SecretKey deSecretKey = deDecretKeyFactory.generateSecret(deKeySpec);
            deCipher.init(Cipher.DECRYPT_MODE, deSecretKey,new SecureRandom());
            byte[] deMsgBytes = deCipher.doFinal(encryptBytes);
            return deMsgBytes;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

測試類

package com.david.des;

public class DesMainTest {

    private static String key = "12345678";

    public static void main(String[] args) throws Exception{
        String msg = "hello world. 你好,DES";
        System.out.println("加密前:"+msg);
        byte[] encryptBytes = DESEncryptTools.encrypt(msg.getBytes(),key.getBytes());
        System.out.println("加密後:"+new String(encryptBytes));
        byte[] deMsgBytes = DESEncryptTools.decrypt(encryptBytes,key.getBytes());
        System.out.println("解密後:"+new String(deMsgBytes));
    }
}

測試結果

這裡寫圖片描述

總結

學習了一下DES加密解密演算法!

相關推薦

DES加密解密->java實現

DES加密解密涉及到的JAVA類 Cipher 此類為加密和解密提供密碼功能。它構成了 Java Cryptographic Extension (JCE) 框架的核心。 為建立 Cipher 物件,應用程式呼叫 Cipher 的 getInstan

凱撒密碼加密解密--JAVA實現(基礎)

soft ring java實現 sta 想是 clas pub sof print 凱撒密碼一種代換密碼,據說凱撒是率先使用加密函的古代將領之一,因此這種加密方法被稱為愷撒密碼。凱撒密碼的基本思想是:通過把字母移動一定的位數來實現加密和解密。明文中的所有字母都在字母表上向

Java實現DES加密解密演算法

import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFact

Java使用Hutool實現AES、DES加密解密

介紹 AES和DES同屬對稱加密演算法,資料發信方將明文(原始資料)和加密金鑰一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的金鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文。在

python進行des加密解密,而且可以與JAVA進行互相加密解密

odi times pla dea details names ideal cati encrypt import binasciifrom pyDes import des, CBC, PAD_PKCS5import uuidimport time# pip instal

C++呼叫openssl實現DES加密解密cbc模式 zeropadding填充方式 pkcs5padding填充方式 pkcs7padding填充方式

==============================================     des   cbc  加密 zeropadding填充方式 ============================================== //加密 cbc ze

DES加密解密演算法C語言程式碼實現

程式碼: 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 /*------------------------ 5 定義列舉型全域性變數 6 -----

java php DES 加密解密

Java程式碼   import java.io.IOException;   import java.security.SecureRandom;   import javax.crypto.Cipher;   import javax.crypto.SecretKey;   import jav

PHP、JAVA、C#、Object-C、Android 通用的DES加密解密

PHP加密解密: class JoDES { private static $_instance = NULL; /** * @return JoDES */ public static function sh

網路安全學習之C語言版DES加密解密演算法的程式設計與實現

其實明白了DES演算法的流程程式設計實現是不難的,當然可能會在S盒實現那碰到點問題。下面的DES演算法包括加密和解密兩個功能,主要有生成16個子金鑰和DES演算法的主程式組成。輸出的資訊有16輪子金鑰以及每輪的中間值以及最後的結果。具體的程式碼中都有註釋,就看程式碼吧。關於D

java加密解密AES實現

加密時,先用AES加密,再用base64加密;解密時,先用base64解密,再用AES解密。 import org.apache.commons.io.FileUtils; import sun.misc.BASE64Decoder; import sun.misc.BAS

php實現和c#一致的DES加密解密 (php中呼叫方法)

php實現和c#一致的DES加密解密,可以從網上搜到一大堆,但是測試後發現都沒法用。以下正確程式碼是我經過苦苦才找到的。希望大家在系統整合時能用的上。<p>注意:key的長度為8位以內。</p> //C# 版DES 加解密演算法 using Syst

java DES加密解密檔案

在android開發中或者java開發中,經常用一些加密或者解密檔案的,下面是我最近測試的一個DES加密解密檔案的方式,記錄一下,防止以後忘記了! 下面直接貼程式碼把,詳細的註釋都寫有: package com.spring.des; import java.i

用C#實現DES加密解密封裝

{            byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8));            byte[] keyIV = keyBytes;            byte[] inputByteArray = Convert.

Java Des加密解密工具類

原文連結: 1、http://www.java2s.com/Code/Java/Security/EncryptingaStringwithDES.htm 2、http://www.avajava.com/tutorials/lessons/how-do-i-encrypt

最簡單的DES加密算法實現

ava source bytes gen div this except vax odi Base64.java package com.mstf.des; import java.io.UnsupportedEncodingException; /*

AES加密解密 Java中運用

upper span pub substring rac ont wid mem log AES全稱 Advanced Encryption Standard, 高級加密算法,更加安全,可取代DES。 Aes: package com.blog.d201706.en

C#des加密解密

length format esp lin div logs fin sin esc using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy

php7 des加密解密

1.在linux 環境中如果沒有裝encrypt擴充套件 或者php版本大於7.1不支援encrypt加密擴充套件   可以使用openssl加密擴充套件 下面是封裝的加密和解密的方法可直接呼叫   /** * des-ecb加密 * @param str

go語言實現非對稱加密——RSA加密解密實現

版權宣告:本文為作者原創,如需轉載,請註明出處 https://blog.csdn.net/weixin_42940826 非對稱加密簡介 什麼是非對稱加密 非對稱加密,顧名思義,是相對於對稱加密的一種加密方法,對稱加密是指加密與解密使用的是同一把祕鑰,而非對稱加