more work on the encryption library

This commit is contained in:
Frank Karlitschek 2011-08-10 17:24:38 +02:00
parent 8ff736b571
commit 613ab41eb3
1 changed files with 69 additions and 3 deletions

View File

@ -3,7 +3,6 @@
* ownCloud * ownCloud
* *
* @author Frank Karlitschek * @author Frank Karlitschek
* @author Jakob Sack
* @copyright 2010 Frank Karlitschek karlitschek@kde.org * @copyright 2010 Frank Karlitschek karlitschek@kde.org
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
@ -21,6 +20,15 @@
* *
*/ */
// Todo:
// Crypt/decrypt button in the userinterface
// transparent decrypt/encrpt in filesystem.php
// don't use a password directly as encryption key. but a key which is stored on the server and encrypted with the user password. -> password change faster
require_once('Crypt_Blowfish/Blowfish.php'); require_once('Crypt_Blowfish/Blowfish.php');
/** /**
@ -28,6 +36,19 @@ require_once('Crypt_Blowfish/Blowfish.php');
*/ */
class OC_Crypt { class OC_Crypt {
static $encription_extension='.encrypted';
public static function createkey( $passcode) {
// generate a random key
$key=mt_rand(10000,99999).mt_rand(10000,99999).mt_rand(10000,99999).mt_rand(10000,99999);
// encrypt the key with the passcode of the user
$enckey=OC_Crypt::encrypt($key,$passcode);
// Write the file
file_put_contents( "$SERVERROOT/config/encryption.key", $enckey );
}
/** /**
* @brief encrypts an content * @brief encrypts an content
* @param $content the cleartext message you want to encrypt * @param $content the cleartext message you want to encrypt
@ -51,11 +72,56 @@ class OC_Crypt {
* This function decrypts an content * This function decrypts an content
*/ */
public static function decrypt( $content, $key) { public static function decrypt( $content, $key) {
$bf = new Crypt_Blowfish($key); $bf = new Crypt_Blowfish($key);
return($bf->encrypt($contents)); return($bf->encrypt($contents));
} }
/**
* @brief encryption of a file
* @param $filename
* @param $key the encryption key
*
* This function encrypts a file
*/
public static function encryptfile( $filename, $key) {
$handleread = fopen($filename, "rb");
if($handleread<>FALSE) {
$handlewrite = fopen($filename.OC_Crypt::$encription_extension, "wb");
while (!feof($handleread)) {
$content = fread($handleread, 8192);
$enccontent=OC_CRYPT::encrypt( $content, $key);
fwrite($handlewrite, $enccontent);
}
fclose($handlewrite);
unlink($filename);
}
fclose($handleread);
}
/**
* @brief decryption of a file
* @param $filename
* @param $key the decryption key
*
* This function decrypts a file
*/
public static function decryptfile( $filename, $key) {
$handleread = fopen($filename.OC_Crypt::$encription_extension, "rb");
if($handleread<>FALSE) {
$handlewrite = fopen($filename, "wb");
while (!feof($handleread)) {
$content = fread($handleread, 8192);
$enccontent=OC_CRYPT::decrypt( $content, $key);
fwrite($handlewrite, $enccontent);
}
fclose($handlewrite);
unlink($filename.OC_Crypt::$encription_extension);
}
fclose($handleread);
}