#TrucoDelDia > Cifrar PlayerPrefs

#Unity nos ofrece una clase muy cómoda para guardar la Configuración y Scores de nuestro juego PlayerPref  que se usa de forma estática y que básicamente es una tabla de <key, value> que se guarda de forma local en el dispositivo, ya sea Windows, IOS o Android. En cada dispositivo se guardará donde corresponda (en Windows por ejemplo lo podemos encontrar en el registro). Es una forma rápida y cómoda de trabajar aunque todo se guarda en plano y accesible por cualquier usuario curioso … por lo que no debería ser una opción a tener en cuenta si queréis guardar datos sensibles, como las transacciones del juego o los datos que se sincronicen de forma online, ya que es bastante fácil de manipular.

Aquí tenéis la forma de usar esta clase para guardar 3 valores y como recuperarlos

Ahora solo tenemos que abrir el registro de Windows y navegar hasta [HKEY_CURRENT_USER]/Software/[Nombre Company]/[Nombre Proyecto] (si no habéis especificado company, estará en ‘DefaultCompany’)

Registro1

Para solucionar el problema de los datos manipulados tenemos 2 opciones: O implementamos nuestra propia clase para salvar los datos en un formato que solo conozcamos nosotros (el nivel de seguridad más absurdo, es decir, tus datos son seguros porque nadie conoce como los has guardado) o seguir usando la clase PlayerPref pero cifrar los datos al hacer la escritura. Lógicamente aquí vamos a ver la segunda opción: Como cifrar los datos para seguir usando PlayerPrefs por debajo, así nos ahorramos todos los problemas de tener que estudiar donde podemos guardar en cada dispositivo y los permisos necesarios

Nuestra interfaz de cifrado

Vamos a empezar por crear una interfaz con los métodos del cifrado, luego crearemos una clase que implemente esta interfaz para añadir un cifrado básico. De esta forma será posible añadir distintos algoritmos de cifrado sin cambiar la lógica que se comunica con el PlayerPrefs. En esta interfaz solo tendremos 2 métodos para Cifrar/Descifrar un texto mediante un password.

Siempre me ha gustado mas los términos Encriptar/Desencriptar … los iré combinando en el post, avisado quedas

Antes de empezar a crear nuestra clase de cifrado tenemos que tener 2 cosas en mente

  • Tipo de datos: PlayerPrefs tiene métodos estáticos para hacer su setString, seInt, setFloat … y así con los tipos mas básicos, del mismo modo tiene los Geters de cada tipo. Está claro que si nosotros vamos a cifrar el contenido de estos valores todo va a ser Strings, por lo que todas las escrituras y lecturas a PlayerPrefs van a ser del tipo String. Cuando queramos sacar un Int tendremos que consultar el String cifrado y luego hacer el correspondiente Parse() para devolver el valor numérico (Aquí es donde deberéis empezar a familiarizaros con los Métodos Genericos de C# <T> ).
  • Cifrado vs Hash: Vamos a usar un cifrado bidirencional para nuestros <Values> porque obviamente queremos cifrar los datos pero también queremos recuperarlos luego. Pero la para nuestra <Key> no es necesario cifrarlas … si que queremos ocultarla porque no queremos que el usuario vea la clave ‘vidas’ y la clave ‘puntuacion’ pero no es necesario cifrarlas, bastará con usar un Hash Md5.

Nuestro Cifrado

SecurePrefs

Aquí tenemos la estructura base de nuestra clase con los 2 metodos SetString/GetString (fijate que son privados!!) … Empezamos por tener un metodo Configure donde establecemos el algorimo de cifrado y el password que vamos a usar para cifrar los datos. A partir de ahi los metodos Get/Set vereis que simplemente cifran y descifran segun hemos descrito antes

A continuación añadimos los Get/Set que vamos a usar, de momento solo meto Bool/Int/String

Resultado

No tiene más que explicar, solo falta ver como se comporta esto:

Registro2

 

 

You may also like...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *