2016-06-07 5 views
2

Ich habe noch nie C++ verwendet, aber jetzt brauche ich diese Funktion zu C migrieren ++:PBEKeySpec C++ analog

public static byte[] getSafeKey(String key, byte[] initVector) { 
    KeySpec keySpec = new PBEKeySpec(key.toCharArray(), initVector, 
      ITERATION_COUNT, KEY_LENGTH); 
    SecretKeyFactory keyFactory = null; 
    try { 
     keyFactory = SecretKeyFactory 
       .getInstance("PBKDF2WithHmacSHA1"); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
    byte[] keyBytes = new byte[0]; 
    try { 
     keyBytes = keyFactory.generateSecret(keySpec).getEncoded(); 
    } catch (InvalidKeySpecException e) { 
     e.printStackTrace(); 
    } 
    SecretKey skey = new SecretKeySpec(keyBytes, "AES"); 

    return skey.getEncoded(); 
} 

Bisher fand ich ein PBEKeySpec analog: http://beecrypt.sourceforge.net/doxygen/c++/classbeecrypt_1_1crypto_1_1spec_1_1PBEKeySpec.html

Aber selbst dann habe ich keine Ahnung, was mit keyFactory und weiter zu tun ist.

Gibt es eine einfache Möglichkeit, es in C++ zu schreiben?

+0

Ich entfernte das Crypto ++ - Tag. Sie sollten das Tag hinzufügen, wenn Sie die Technologie verwenden. und nicht für "was soll ich tun und wie soll ich es machen?" Fragen. – jww

+0

Ja, sicher. Werde es nicht noch einmal tun. Eigentlich verwende ich es im Projekt, deshalb habe ich Tag hinzugefügt. – Shur

Antwort

1

Für verwalteten Code können Sie möglicherweise die schlecht benannte Rfc2898DeriveBytes verwenden. RFC 2898 definiert PKCS # 5: Passwort-basierte Verschlüsselung. Diese Version enthält den PBKDF2-Passwort-Hash (oder die passwortbasierte Schlüsselableitungsfunktion, falls erforderlich).

Für nicht verwalteten Code scheint es an implementation of PBKDF2 in Crypto++ zu sein. Beachten Sie, dass der Hash in der Java-Version auch innerhalb der HMAC-Konstruktion verwendet wird. Botan ist auch eine Option.

Beachten Sie, dass die Java-Version die niedrigsten 8 Bit char Werte des Passworts direkt verwendet. Es kann also durchaus mit anderen Implementierungen für Nicht-ASCII-Zeichen inkompatibel sein.