久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

C# 和 Java DES 加密值不相同

C# and Java DES Encryption value are not identical(C# 和 Java DES 加密值不相同)
本文介紹了C# 和 Java DES 加密值不相同的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我正在嘗試使用 C# 和 Java 加密相同的數(shù)據(jù).如果數(shù)據(jù)超過 7 個(gè)字節(jié),則 Java 和 C# 的加密值不相同.

I am trying to encrypt the same data using C# and Java. If the data is more than 7 bytes then Java and C#'s encrypted value are not identical.

  • 輸入1:a
    java 輸出:FrOzOp/2Io8=
    C# 輸出:FrOzOp/2Io8=

輸入 2:abc
j : H9A/ahl8K7I=
c#: H9A/ahl8K7I=

輸入 3:aaaaaaaa(問題)
j : Gxl7e0aWPd7j6l7uIEuMxA==
c#:Gxl7e0aWPd7sf1xR6hK4VQ==

這里是C#和Java方法的實(shí)現(xiàn).
C#代碼:

Here is the implementation of C# and Java methods.
C# code:

public String saltTxt = "12345678";
public String Encrypt(String txt)
{
        byte[] data = Encrypt(Encoding.UTF8.GetBytes(txt));
        
        DESCryptoServiceProvider alg = new DESCryptoServiceProvider();

        alg.Key = Encoding.UTF8.GetBytes(saltTxt.ToCharArray(), 0, cprovider.KeySize / 8);
        alg.IV = new byte[8];

        MemoryStream ms = new MemoryStream();
        CryptoStream stem = new CryptoStream( ms, cprovider.CreateEncryptor(),CryptoStreamMode.Write);

        stem.Write(txt, 0, txt.Length);
        stem.FlushFinalBlock();

        data = ms.ToArray();
        
        return Convert.ToBase64String(data);
 }

Java 代碼:

public String saltTxt = "12345678";
public String Encrypt(String str) {
    try {
        KeySpec myKey = new DESKeySpec(saltTxt.getBytes("UTF8"));
        SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(myKey);
        Cipher ecipher = Cipher.getInstance("DES");
        ecipher.init(Cipher.ENCRYPT_MODE, key);

        byte[] data = str.getBytes("UTF8");

        byte[] crypt = ecipher.doFinal(data);
        
        return new BASE64Encoder().encode(crypt);
    } catch (Exception ex) {
    }

    return null;
} 

知道為什么它沒有按預(yù)期工作嗎?

Any idea why it's not working as expected?

推薦答案

問題出在模式的加密.

SunJCE 提供程序使用 ECB 作為默認(rèn)模式,PKCS5Padding 作為 DES 的默認(rèn)填充方案,DES-EDE 和 Blowfish 密碼.(JCA 文檔)

SunJCE provider uses ECB as the default mode, and PKCS5Padding as the default padding scheme for DES, DES-EDE and Blowfish ciphers. (JCA Doc)

.Net中,對稱算法的默認(rèn)操作模式是CipherMode.CBC,默認(rèn)填充是PaddingMode.PKCS7.(msdn..SymmetricAlgorithm)

In .Net, The default operation mode for the symmetric algorithm is CipherMode.CBC and default padding is PaddingMode.PKCS7. (msdn..SymmetricAlgorithm)

以下更改解決了該問題.

The following changes resolve the problem.

// in C# 
DESCryptoServiceProvider alg = new DESCryptoServiceProvider();
alg.Mode = CipherMode.ECB;  // specified 

// in java
chiper = Cipher.getInstance("DES/CBC/PKCS5Padding");

兩邊不要改變.

這篇關(guān)于C# 和 Java DES 加密值不相同的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Java Remove Duplicates from an Array?(Java從數(shù)組中刪除重復(fù)項(xiàng)?)
How to fix Invocation failed Unexpected Response from Server: Unauthorized in Android studio(如何修復(fù)調(diào)用失敗來自服務(wù)器的意外響應(yīng):在 Android 工作室中未經(jīng)授權(quán))
AES encryption, got extra trash characters in decrypted file(AES 加密,解密文件中有多余的垃圾字符)
AES Error: Given final block not properly padded(AES 錯(cuò)誤:給定的最終塊未正確填充)
Detecting incorrect key using AES/GCM in JAVA(在 JAVA 中使用 AES/GCM 檢測不正確的密鑰)
AES-256-CBC in Java(Java 中的 AES-256-CBC)
主站蜘蛛池模板: 4h影视 | 亚洲a视频 | 欧美男人的天堂 | 亚洲色在线视频 | 国产精品视频不卡 | 国产成人午夜高潮毛片 | 亚洲a一区二区 | 日本免费黄色 | 欧美一区二区在线播放 | 欧美簧片 | 97久久超碰| 人人九九精 | 久久久久久国产免费视网址 | 91最新在线视频 | 嫩草国产 | 超碰在线网站 | 91视频18 | 国产欧美一区二区在线观看 | 日韩av美女电影 | 人人干人人玩 | 久久99精品国产99久久6男男 | 成人免费影院 | 日韩视频1| av天天操| 亚洲一区 中文字幕 | 免费在线一区二区三区 | 91精品国产综合久久精品图片 | 久久草在线视频 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 成人国产在线视频 | 欧美一级二级在线观看 | 精品久久国产 | 亚洲第一天堂无码专区 | 欧美一级二级三级 | 日韩欧美在| 午夜爽爽爽男女免费观看 | 色婷婷综合久久久中字幕精品久久 | 成人免费视频久久 | 成人亚洲性情网站www在线观看 | av黄色国产 | 日韩视频在线观看中文字幕 |