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