1

こんにちは。base64 エンコーディングを使用して一部のテキストを暗号化し、エンコードされたデータを .NET アプリケーションに渡す必要があります。.NET アプリケーションは、次の形式のエンコードとデコードを使用します。Java での CryptoStream .NET と同等のものを試しましたか? . 上記のリンクに従って、この目的のために Apache commons コーデックを使用しました。しかし、 cryptoProvider.CreateEncryptor(bytes, bytes) で立ち往生し、同等のJavaで3番目のパラメーターをチェックすると-

Cipher.init(cipher.ENCRYPT_MODE,key,iv)

これは IvParameterSpec でなければなりません。これを解決する方法がわかりません。助けてもらえることを願っています、乾杯!

.NET 暗号化

static byte[] bytes = ASCIIEncoding.ASCII.GetBytes("mykey");
public static string Encrypt(string originalString)
{        
    DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
    MemoryStream memoryStream = new MemoryStream();
    CryptoStream cryptoStream = new CryptoStream(memoryStream,cryptoProvider.CreateEncryptor(bytes, bytes), CryptoStreamMode.Write);
    StreamWriter writer = new StreamWriter(cryptoStream);
    writer.Write(originalString);
    writer.Flush();
    cryptoStream.FlushFinalBlock();
    writer.Flush();
    return Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);
}

同等

Java 暗号化

void encrypt(String inputText) throws Exception {
    try {
        String myKey = "mykey";
        byte[] mybyte = str.getBytes("ASCII");
        //String plainIV = "1234567890ABCDEF";
        KeySpec keySpec = new DESKeySpec(myKey.getBytes("ASCII"));
        SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(keySpec);
        //IvParameterSpec iv = new IvParameterSpec(org.apache.commons.codec.binary.Hex.decodeHex(plainIV.toCharArray()));
        IvParameterSpec iv = new IvParameterSpec(mybyte);
        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE,key,iv);
        byte[] encoded = cipher.doFinal(inputText.getBytes("ASCII"));   
        System.out.println("Encoded Value ..... "+Base64.encodeBase64(encoded));
    } catch(UnsupportedEncodingException e) {
        System.out.println("Exception .. "+ e.getMessage());
    }

.Net では、エンコードされた値として AOb0B20x2onFGz+JaFBsZyFbvCS9WF49D を取得しますが、Java では、ワイヤード エンコードされた文字列を取得しています - =�SKNv?�N�Ɛq{���U�;�/Z���8�� <

編集:-

zacheusz に従ってエンコーディングの問題を解決しましたが、.NET と Java の両方でエンコードされた文字列が異なります...

4

2 に答える 2