Реализация Triple DES дает разные результаты как в Crypto JS, так и в gwt-crypto - PullRequest
0 голосов
/ 29 марта 2020

Я использую библиотеку Crypto JS для проекта Angular 2+ и использую библиотеку gwt-crypto для проекта Java. Согласно этой статье , можно легко реализовать Triple DES, поэтому я сделал это так:

import com.googlecode.gwt.crypto.bouncycastle.DataLengthException;
import com.googlecode.gwt.crypto.bouncycastle.InvalidCipherTextException;
import com.googlecode.gwt.crypto.client.TripleDesCipher;
public class CryptoKit {
    private static final String LOCAL_KEY = "exampleofsecretkey4myapp";
    public static String encryptMessage(String textToEncrypt) {
        byte[] key = LOCAL_KEY.getBytes();
        TripleDesCipher cipher = new TripleDesCipher();
        cipher.setKey(key);
        String textEncrypted = "";
        try {
            textEncrypted = cipher.encrypt(String.valueOf(textToEncrypt));
        } catch (DataLengthException | IllegalStateException | InvalidCipherTextException e) {
            e.printStackTrace();
        }
        return textEncrypted;
    }
    public static String decryptMessage(String textToDecrypt) {
        byte[] key = LOCAL_KEY.getBytes();
        TripleDesCipher cipher = new TripleDesCipher();
        cipher.setKey(key);
        String textDecrypted = "";
        try {
            textDecrypted = cipher.decrypt(textToDecrypt);
        } catch (DataLengthException | IllegalStateException | InvalidCipherTextException e) {
            e.printStackTrace();
        }
        return textDecrypted;
    }
}

Как я хочу общаться с моим приложением Angular Я пытался выполнить то же упражнение, используя Crypto JS, например:

import { Injectable } from '@angular/core';
import * as CryptoJS from 'crypto-js';
@Injectable({
  providedIn: 'root'
})
export class VdCryptoService {
  private static localKey: string = 'exampleofsecretkey4myapp';
  encryptMessage(message: string): string {
    return CryptoJS.TripleDES.encrypt(message, this.localKey).toString();
  }
  decryptMessage(message: string): string {
    return CryptoJS.TripleDES.decrypt(message, this.localKey).toString(CryptoJS.enc.Utf8);
  }
}

Но когда я тестирую два моих приложения, они выдают разные результаты шифрования. Например, если я проверил «Пример сообщения» в качестве входных данных, я получу:

CryptoJS: U2FsdGVkX1/l7hDE9US+MQFcmBw3u2HWN45H3c8shsk=

gwt-crypto: ac5f6601d994bb6a9b7ea304a1523c99

Как интересный факт, оба приложения могут зашифровать и расшифровывать правильно, но они выдают разные шифрования, и я не знаю, как это решить, чтобы общаться между ними. Кто-нибудь может мне помочь? Возможно, мне нужны процедуры, о которых я не знаю, или я неправильно выполняю реализацию.

Спасибо.

...