Я пытаюсь сделать расшифровку, но я действительно не знаю, как обычная криптография работает на Swift. У меня есть этот код в Java, и я должен конвертировать в Swift, но я не добился успеха
Я использую Swift 4.2 и Java 8
Эта функция работает в Java
private static final String CIPHER_NAME = "DESede";
private static final String ALGORITHM = "MD5";
private static final String SECRET_KEY = "p3tr1c0r";
public static String decrypt(String encryptedText) {
String base64EncryptedString;
try{
byte[] message = Base64.decodeBase64(encryptedText.getBytes(StandardCharsets.UTF_8.name()));
MessageDigest md = MessageDigest.getInstance(ALGORITHM);
byte[] digestOfPassword = md.digest(SECRET_KEY.getBytes(StandardCharsets.UTF_8.name()));
byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
SecretKey key = new SecretKeySpec(keyBytes, CIPHER_NAME);
Cipher decipher = Cipher.getInstance(CIPHER_NAME);
decipher.init(Cipher.DECRYPT_MODE, key);
byte[] plainText = decipher.doFinal(message);
base64EncryptedString = new String(plainText, StandardCharsets.UTF_8.name());
}catch (UnsupportedEncodingException | NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException ex){
log.warn("Exception while trying to decrypt, using encryptedText ");
base64EncryptedString = encryptedText;
}
return encryptedText;
}
На данный момент у меня есть этот код для дайджеста md5, я знаю, как я могу конвертировать в base 64 и наоборот, моя проблема в том, когда я хочу конвертировать байты, в java, если я вижу журнал, байты отрицательны, но в быстром являются байты без знака, это то же самое? а у меня другая проблема cipherDesede
, есть что-то похожее на swift?
let str = "61880868013"
let buf: [UInt8] = Array(str.utf8)
func MD5(string: String) -> Data {
let messageData = string.data(using:.utf8)!
var digestData = Data(count: Int(CC_MD5_DIGEST_LENGTH))
_ = digestData.withUnsafeMutableBytes {digestBytes in
messageData.withUnsafeBytes {messageBytes in
CC_MD5(messageBytes, CC_LONG(messageData.count), digestBytes)
}
}
return digestData
}
в Java ввод: uoqrHNWzb4XMQZoTQSGsHQ ==
на выходе 61880868013