需要使用C#中的Java等效代码进行加密和解密

时间:2017-04-18 09:53:31

标签: java c# tripledes

我们有一个在.NET中运行多年的应用程序。它使用下面的c#代码来加密和解密密码。现在我们在Java中有另一个应用程序来使用相同的DB进行身份验证。尝试了各种方法但无法在Java中获得用于C#中的以下加密和解密的等效代码。由于使用此逻辑加密了大量数据并存储在DB中,因此无法更改C#代码。有人可以帮助Java中的等效代码吗?在此先感谢。

var markersList = [];    

function removeMarkers(markersList) {
   for(var i = 0; i < markersList.length; i++) {
      markersList[i].setMap(null);
   }
}

function addMarkers() {
   var marker = new google.maps.Marker({
        position : {
            lat : 12.374,
            lng : -11.55
        },
        map : map
       });
      markersList.push(marker);
   }

尝试过的Java代码

private string passphrase = "XYZ";
public string EncryptData(string Data)
    {
        byte[] Results;
        var UTF8 = new UTF8Encoding();
        var HashProvider = new MD5CryptoServiceProvider();
        byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(passphrase));
        var TDESAlgorithm = new TripleDESCryptoServiceProvider();
        TDESAlgorithm.Key = TDESKey;
        TDESAlgorithm.Mode = CipherMode.ECB;
        TDESAlgorithm.Padding = PaddingMode.PKCS7;
        byte[] DataToEncrypt = UTF8.GetBytes(Data);
        try
        {
            ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
            Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);
        }
        finally
        {
            TDESAlgorithm.Clear();
            HashProvider.Clear();
        }
        return Convert.ToBase64String(Results);
    }

    public string DecryptString(string Message)
    {
        byte[] Results;
        var UTF8 = new UTF8Encoding();
        var HashProvider = new MD5CryptoServiceProvider();
        byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(passphrase));
        var TDESAlgorithm = new TripleDESCryptoServiceProvider();
        TDESAlgorithm.Key = TDESKey;
        TDESAlgorithm.Mode = CipherMode.ECB;
        TDESAlgorithm.Padding = PaddingMode.PKCS7;
        byte[] DataToDecrypt = Convert.FromBase64String(Message.Replace(" ", "+"));
        try
        {
            ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor();
            Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length);
        }
        finally
        {
            TDESAlgorithm.Clear();
            HashProvider.Clear();
        }
        return UTF8.GetString(Results);
    }

公共类TripleDESTest {

import java.security.MessageDigest;
import java.util.Arrays;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

}

1 个答案:

答案 0 :(得分:1)

看起来问题不是找到等效代码,而是将C#代码移植到Java,但由于使用了C#引用和.net程序集,因此使用支持Triple DES的等效Java库。你有没有调查Triple Des的等效Java库?快速搜索找到了这个例子:

https://www.example-code.com/java/crypt2_3des.asp