2017-07-05 4 views

Répondre

1

Utilisez la méthode statique suivante dans la classe AesCbcWithIntegrity (link):

/** 
* An aes key derived from a base64 encoded key. This does not generate the 
* key. It's not random or a PBE key. 
* 
* @param keysStr a base64 encoded AES key/hmac key as base64(aesKey) : base64(hmacKey). 
* @return an AES and HMAC key set suitable for other functions. 
*/ 
public static SecretKeys keys(String keysStr) throws InvalidKeyException {...} 

Il traitera correctement les clés précédemment sérialisés dans la clé de chiffrement et la clé d'intégrité.

+1

Je suis l'auteur de cette bibliothèque et je peux confirmer que c'est la bonne réponse. Utilisez "keyString" pour convertir une clé en une chaîne et "keys" pour convertir une chaîne en une clé. Comme l'a souligné quantumThinker, il y a des dangers à stocker la clé, et cela peut ou non être sécurisé, selon votre cas d'utilisation. Pensez également à utiliser "generateKeyFromPassword" si cela peut fonctionner selon vos besoins. –

0

En passant par le lien, vous pouvez voir que vous devez utiliser le code suivant pour convertir la chaîne chiffrée en celle souhaitée.

//Use the constructor to re-create the CipherTextIvMac class from the string: 
    CipherTextIvMac cipherTextIvMac = new CipherTextIvMac (cipherTextString); 
    String plainText = AesCbcWithIntegrity.decryptString(cipherTextIvMac, **keys**); 

Les clés est la même clé qui a été utilisé pendant le cryptage. Comme vous pouvez le voir, vous devez stocker la clé pour le déchiffrer. Le lien fournit également la précaution de stocker la clé

Une fois que vous avez créé une clé aléatoire, vous pouvez naturellement vouloir stocker il. Cela peut fonctionner pour certains cas d'utilisation, mais sachez que si vous stockez la clé au même endroit où vous stockez les données cryptées, votre solution ne sera pas cryptographiquement valide puisque l'attaquant peut simplement obtenir à la fois la clé et le crypté. texte. Au lieu de cela, vous devez utiliser soit l'infrastructure Keystore, soit envisager de générer la clé à partir de une phrase secrète et de l'utiliser pour chiffrer les données utilisateur.

Si malgré cela vous voulez toujours stocker la clé, vous pouvez convertir les clés d'une chaîne en utilisant les fonctions incluses et les stocker dans les préférences ou SQLite.

+0

'Chaîne plainText = AesCbcWithIntegrity.decryptString (cipherTextIvMac, ** keys **);' nécessite un objet 'KeyStore' non Chaîne –

+0

Quand ai-je dit qu'il faut une chaîne ??. J'ai dit qu'il nécessite le même objet clé qui a été utilisé pendant le cryptage .. – quantumThinker

+0

alors ce n'est pas mes questions répondre. Je le stocke en tant que chaîne et j'ai besoin de décrypter avec la clé de chaîne –