I am quite new to the encryption subject.
What I need in my PHP scripts is a simple synchronous encryption for a value I need to store in DB. So I already read several tutorials and posts and decided to go with defuse/php-encryption.
The approach seems quite straight forward
generate a key and use it for further decrypt/encrypt
Encrypt
- encrypt data with the key
- store encrypted in DB
Decrypt
- read encrypted data from DB
- decrypt it with the key
- have fun with the plain text
I downloaded v2 of the defuse/php-encryption library from https://github.com/defuse/php-encryption/releases
generated the key
Key::createNewRandomKey();
echo $key->saveToAsciiSafeString();
stored it - for testing - just directly in a getKey()
method of my PHP script.
I encrypt/decrypt like this
Crypto::encrypt($plainText, Key::loadFromAsciiSafeString($key));
Crypto::decrypt($encryptedText, Key::loadFromAsciiSafeString($key));
which works like a charm as long as I stay on my machine.
Unfortunately when I switch to my Mac laptop and run the same code - with the same key (!), I get an exception:
PHP Fatal error: Uncaught exception 'Defuse\Crypto\Exception\BadFormatException' with message 'Invalid header.' in phar://classes/encryption/defuse-crypto.phar/src/Encoding.php:177
Stack trace:
#0 phar://classes/encryption/defuse-crypto.phar/src/Key.php(38): Defuse\Crypto\Encoding::loadBytesFromChecksummedAsciiSafeString('\xDE\xF0\x00\x00', 'c622e3d4793e511...')
If I generate a new key on the Mac - it works. But this leaves a very uneasy feeling because I have to be able to decrypt the data with the same key on any machine.
If one day the server crashes and I will have to restore the data on a different machine getting such nice errors while decrypting - I will be doomed :-)
I am definitely doing something wrong. I can use any advice you can provide.
thanks