一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python和Java進行DES加密和解密的實例

Python和Java進行DES加密和解密的實例

2021-01-03 00:07haozlee Python

下面小編就為大家分享一篇Python和Java進行DES加密和解密的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

DES 為 Data Encryption Standard (數據加密標準)的縮寫,是一種常見的對稱加密算法。有關對稱加密與非對稱加密的特點及其應用場景,本文就不描述了,讀者可以自行 google 。本文說明如何使用 JavaPython 兩種語言來實現 DES 的加解密

最近碰到的應用場景是這樣的。我們需要對接一個系統 S,系統 S 已經對用戶的身份進行了驗證,新系統 N 也需要對用戶的身份進行驗證。采用的身份驗證方法是由舊系統 S 對用戶 ID 進行加密,然后新系統 N 對加密后的用戶 ID 進行解密,從而獲取用戶 ID 并進行身份驗證。

由于舊系統 S 是用 Java 實現的,新系統 N 使用 Python 實現。也就是說,需要使用 Python 語言來對 Java DES 加密的用戶 ID 進行解密。

這里貼出 Java 實現的 DES 加密的代碼。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
 
public class Main {
 public static void main(String[] args) {
  String content = "zx";
  String key = "20171117";
  System.out.println("加密前:" + content);
  byte[] encrypted = DES_CBC_Encrypt(content.getBytes(), key.getBytes());
  System.out.println("加密后:" + byteToHexString(encrypted));
  byte[] decrypted = DES_CBC_Decrypt(encrypted, key.getBytes());
  System.out.println("解密后:" + new String(decrypted));
 }
 public static byte[] DES_CBC_Encrypt(byte[] content, byte[] keyBytes) {
  try {
   DESKeySpec keySpec = new DESKeySpec(keyBytes);
   SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
   SecretKey key = keyFactory.generateSecret(keySpec);
   Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
   cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(keySpec.getKey()));
   byte[] result = cipher.doFinal(content);
   return result;
  } catch (Exception e) {
   System.out.println("exception:" + e.toString());
  }
  return null;
 }
 private static byte[] DES_CBC_Decrypt(byte[] content, byte[] keyBytes) {
  try {
   DESKeySpec keySpec = new DESKeySpec(keyBytes);
   SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
   SecretKey key = keyFactory.generateSecret(keySpec);
   Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
   cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(keyBytes));
   byte[] result = cipher.doFinal(content);
   return result;
  } catch (Exception e) {
   System.out.println("exception:" + e.toString());
  }
  return null;
 }
 private static String byteToHexString(byte[] bytes) {
  StringBuffer sb = new StringBuffer(bytes.length);
  String sTemp;
  for (int i = 0; i < bytes.length; i++) {
   sTemp = Integer.toHexString(0xFF & bytes[i]);
   if (sTemp.length() < 2)
    sb.append(0);
   sb.append(sTemp.toUpperCase());
  }
  return sb.toString();
 }
}

Java 代碼采用的 DES 加密采用 CBC 模式,采用 PKCS5Padding 的填充模式,使用的初始化向量是加密的密鑰。

執行以上 Java 代碼,輸出:

?
1
2
3
加密前:zx
加密后:1DBBD4E9246EBFFA
解密后:zx

Python 利用 pyDes 對 Java 加密的字符串進行解密的代碼如下所示。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import binascii
from pyDes import des, CBC, PAD_PKCS5
 
def des_encrypt(s):
 """
 DES 加密
 :param s: 原始字符串
 :return: 加密后字符串,16進制
 """
 secret_key = '20171117'
 iv = secret_key
 k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
 en = k.encrypt(s, padmode=PAD_PKCS5)
 return binascii.b2a_hex(en)
 
def des_descrypt(s):
 """
 DES 解密
 :param s: 加密后的字符串,16進制
 :return: 解密后的字符串
 """
 secret_key = '20171117'
 iv = secret_key
 k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
 de = k.decrypt(binascii.a2b_hex(s), padmode=PAD_PKCS5)
 return de
 
str_en = des_encrypt('zx')
print(str_en)
str_de = des_descrypt(str_en)
print(str_de)

Python 語言采用 pyDes 作為 DES 加解密處理的包。DES 解密時采用 CBC 模式,并采用 PAD_PKCS5 作為填充模式,使用解密密鑰作為初始化向量。這些加密的設置跟 Java 語言使用的是一致的。

執行以上 Python 代碼,得到以下輸出:

?
1
2
1dbbd4e9246ebffa
zx

可以看到,同對 Java 語言加密后的字符串,Python 語言可以正常解密。

以上這篇Python和Java進行DES加密和解密的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/lihao21/article/details/78557461

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 关晓彤一级做a爰片性色毛片 | 四虎最新永久免费视频 | 色一级| 天天做天天爱天天一爽一毛片 | 动漫精品午夜在线播放 | 亚洲日韩中文字幕一区 | 国产免费资源高清小视频在线观看 | 国产一区二区三区久久小说 | 逼逼爱 | 欧美男男gaygayxxx | 亚洲入口 | 韩日视频在线观看 | 3d动漫美女被吸乳羞羞视频 | 麻豆自拍 | 热巴在公交车h文 | 国产精品天天影视久久综合网 | 门房秦大爷在线阅读 | 日本啊v在线观看 | 亚州免费一级毛片 | 火影小南被爆羞羞网站进入 | 亚洲精品久久久成人 | 久草在在线免视频在线观看 | ady@ady9.映画网 | 国产精品免费小视频 | 秋霞黄色片 | 秒播影视 午夜福利毛片 | 91赵邦贺 | 日本成人黄色网址 | www.四虎在线| 国产suv精品 | 92福利网 | 隔壁的漂亮邻居hd中文 | a天堂在线视频 | 精品国产一二三区在线影院 | 91免费精品国自产拍在线不卡 | 国产99精品免费视频看6 | 国产精品免费_区二区三区观看 | 火影小南被爆羞羞网站进入 | 亚洲不卡高清免v无码屋 | 九九热这里只有精品视频免费 | 国产剧情在线播放 |