johnpryan / tripledes-dart

Triple DES and DES block cipher implementation ported from CryptoJS
BSD 3-Clause "New" or "Revised" License
11 stars 15 forks source link

Error when encrypt, decrypt text UTF8 #10

Open Nguyenpk57 opened 5 years ago

Nguyenpk57 commented 5 years ago

text example: "👻 👻 김진학테스트 tiếng việt" It cannot decrypt success ={ ={ @ÄYL¤¸ ti¿ng viÇt

Nguyenpk57 commented 5 years ago
import 'package:tripledes/tripledes.dart';

void main() {
  String text = "Ngoc create a chatroom. 👻 👻  김진학테스트 tiếng việt";
  String secret = "20180531100733_userUid02_15277360532520000";
  String cipherText = encryptMessDES(secret, text);
  print(cipherText);

  String newTxt = decryptMessDES(secret, cipherText);
  print(newTxt);
}
String decryptMessDES(String key, String cipherText) {
  var blockCipher = new BlockCipher(new DESEngine(), key);
  return blockCipher.decodeB64(cipherText);
}

String encryptMessDES(String key, String message) {
  var blockCipher = new BlockCipher(new DESEngine(), key);
  return blockCipher.encodeB64(message);
}

output

vHaK4VgcfAACgJQuyYRl9C5V7vQJ8zkOygcYZb8twJYIuNV2V8vBDGfhW4bXlL7RsGHgAYLJG2s= Ngoc create a chatroom. ={ ={ @ÄYL¤¸ ti¿ng viÇt

i try on js, but ouput as: "vHaK4VgcfAACgJQuyYRl9C5V7vQJ8zkObOTrkGYt0uyCsNflh+KgLsEq+yZQzsxC7N2thZLfzLoVmKTi5IEgcUgHnezKqTaQ" "Ngoc create a chatroom. 👻 👻 김진학테스트 tiếng việt"

Nguyenpk57 commented 5 years ago
function decryptByDES(ciphertext, key) {
    var keyHex = CryptoJS.enc.Utf8.parse(key);
    // direct decrypt ciphertext
    var decrypted = CryptoJS.DES.decrypt({
        ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
    }, keyHex, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return decrypted.toString(CryptoJS.enc.Utf8);
}

function encryptByDES(message, key) {
    var keyHex = CryptoJS.enc.Utf8.parse(key);
    var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}

Code js

Disttrack commented 3 years ago

No solution? Im having the same problem with emojis.

Nguyenpk57 commented 3 years ago

No solution? Im having the same problem with emojis.

hi Bro, I am find solution in a long time ago. When I try with other lib on js and use other code on dart. It's working good

Nguyenpk57 commented 3 years ago

No solution? Im having the same problem with emojis.

https://medium.com/@chingsuehok/cryptojs-aes-encryption-decryption-for-flutter-dart-7ca123bd7464 hi, you can try with this source. He used my source code and its' work with me

Disttrack commented 3 years ago

No solution? Im having the same problem with emojis.

https://medium.com/@chingsuehok/cryptojs-aes-encryption-decryption-for-flutter-dart-7ca123bd7464 hi, you can try with this source. He used my source code and its' work with me

Ok, thanks, Ill try it.

dandycheung commented 3 years ago
import 'package:tripledes/tripledes.dart';

void main() {
  String text = "Ngoc create a chatroom. 👻 👻  김진학테스트 tiếng việt";
  String secret = "20180531100733_userUid02_15277360532520000";
  String cipherText = encryptMessDES(secret, text);
  print(cipherText);

  String newTxt = decryptMessDES(secret, cipherText);
  print(newTxt);
}
String decryptMessDES(String key, String cipherText) {
  var blockCipher = new BlockCipher(new DESEngine(), key);
  return blockCipher.decodeB64(cipherText);
}

String encryptMessDES(String key, String message) {
  var blockCipher = new BlockCipher(new DESEngine(), key);
  return blockCipher.encodeB64(message);
}

output

vHaK4VgcfAACgJQuyYRl9C5V7vQJ8zkOygcYZb8twJYIuNV2V8vBDGfhW4bXlL7RsGHgAYLJG2s= Ngoc create a chatroom. ={ ={ @ÄYL¤¸ ti¿ng viÇt

i try on js, but ouput as: "vHaK4VgcfAACgJQuyYRl9C5V7vQJ8zkObOTrkGYt0uyCsNflh+KgLsEq+yZQzsxC7N2thZLfzLoVmKTi5IEgcUgHnezKqTaQ" "Ngoc create a chatroom. 👻 👻 김진학테스트 tiếng việt"

the RIGHT WAY:

void main() {
  String text = "Ngoc create a chatroom. 👻 👻  김진학테스트 tiếng việt";
  String secret = "20180531100733_userUid02_15277360532520000";

  text = String.fromCharCodes(Utf8Encoder().convert(text)); // THE POINT 1

  String cipherText = encryptMessDES(secret, text);
  print(cipherText);

  String newTxt = decryptMessDES(secret, cipherText);

  newTxt = Utf8Decoder().convert(newTxt.codeUnits); // THE POINT 2

  print(newTxt);
}