Esta es mi página y clase para cifrar la cadena introducida y guardada en la base de datos.
Cada vez, el Key__c
es el mismo, como lo tomo de la configuración personalizada.
Pero cuando ingreso abc
y guardo dos veces, el valor ingresado es diferente.
¿Cuál es la razón?
<apex:page controller="encryptNewController">
<apex:form >
<apex:outPutLabel value="Encrypted by Code"/>
<apex:inputsecret value="{!encryptedByCode}"/>
<apex:commandButton value="Save" action="{!saveValues}"/>
<apex:outputText value="{!decryptedDataString}"/>
</apex:form>
</apex:page>
public with sharing class encryptNewController {
Public Encrypt_Object__c encryptObject {get;set;}
Public String encryptedByCode {get;set;}
Public String decryptedDataString {get;set;}
Blob cryptoKey;
public encryptNewController(){
encryptObject=new Encrypt_Object__c();
}
public void saveValues(){
List<CryptoKey__c> keyValue = [SELECT Key__c FROM CryptoKey__c where id != null];
String cryptoKeyString;
System.debug('000000000000000000000000000000000000000000keyValue'+keyValue);
if(keyValue.size() > 0){
cryptoKeyString = keyValue[0].Key__c;
cryptoKey = EncodingUtil.base64Decode(cryptoKeyString);
System.debug('000000000000000000000000000000000000000000cryptoKey'+cryptoKey);
}
encryptObject.Encrypted_by_Code__c = encryptToken(encryptedByCode);
insert encryptObject;
Encrypt_Object__c insertedencryptObject = [Select id,Encrypted_by_Code__c from Encrypt_Object__c where id=: encryptObject.id][0];
decryptedDataString =decryptToken(insertedencryptObject.Encrypted_by_Code__c);
}
public String encryptToken(String strOriginal){
Blob encryptedData;
if(cryptoKey != null){
String strUrlUTF8 = EncodingUtil.urlEncode(strOriginal, 'UTF-8');
Blob b = Blob.valueOf(strUrlUTF8);
System.debug('@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@cryptoKey'+cryptoKey);
encryptedData = Crypto.encryptWithManagedIV('AES256', cryptoKey, b);
return EncodingUtil.base64Encode(encryptedData);
}else{
return null;
}
}
public String decryptToken(String encryptedString){
if(cryptoKey != null){
Blob b = EncodingUtil.base64Decode(encryptedString);
Blob decryptedData = Crypto.decryptWithManagedIV('AES256', cryptoKey, b);
String strUrlUTF8 = decryptedData.toString();
return EncodingUtil.urlDecode(strUrlUTF8, 'UTF-8');
}else{
return null;
}
}
}
================================================
¿La misma cadena cifrada con la misma clave no genera el mismo valor cifrado?