java.lang.ClassCastException: [B ne peut pas être jeté à java.lang.Chaîne

J'ai écrit une entitity de classe avec le Champ identifiant de connexion et Mot de passe.

Iam cryptage de la passwrd et stoiring dans la db à l'aide de la AES_ENCRYPT.

Je veux restauration uniquement le mot de passe qui est décrypté. donc, im en utilisant AES_DECRYPT à l'aide de NAtiveQueryis Ouvert JPA 2.0.

Requête que j'ai écrit est :

Query q = em.createNativeQuery("select AES_DECRYPT(l.password,?2) from loginDetails l where l.loginID = ?1");
q.setParameter(1, loginId);
q.setParameter(2, getKey());
String s = q.getSingleResult();  

Mais je suis de l'exception suivante:

java.lang.ClassCastException: [B cannot be cast to java.lang.String
at com.rcs.chef.validation.UserValidation.decryptedPasswordForID(UserValidation.java:99)
at com.rcs.chef.validation.UserValidation.validateUser(UserValidation.java:81)
at com.rcs.chef.validation.UserValidation.activate(UserValidation.java:72)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:226)
at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:824)
at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:636)
at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:724)
at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:64)
at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:219)
at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:147)
at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:640)
at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:331)
at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:227)

J'ai même essayé ceci:

Query q = em.createNativeQuery("select AES_DECRYPT(l.password,?2) from loginDetails l where l.loginID = ?1");
q.setParameter(1, loginId);
q.setParameter(2, getKey());
List<Object> s = q.getResultList();  
String s1 = null;
for(Object o : s){
s1= (String) o;
}

Même ici aussi im gettng la même Exception que :

java.lang.ClassCastException: [B cannot be cast to java.lang.Object

Pouvez-vous me dire quelle est l'Erreur avec la requête de l'adn de la manipulation de la req.

Pourquoi utiliser la base de données de le faire lorsque Java a des bibliothèques pour le faire pour vous?
Ne pas crypter les mots de passe. Les mots de passe doivent être solidement haché; il ne doit jamais être possible de récupérer un mot de passe.
Pourquoi utiliser des bibliothèques Java lorsque la base de données fournit ce hors de la boîte, de sorte que le mot de passe n'avez même pas à quitter la db?

OriginalL'auteur user1909657 | 2012-12-24