/**
 * Diese Funktion erstellt einen sh1 salt
 * @param $tosalt string zu verschlüsselnder String
 * @return array public Key, sh1 salt
 */
function genSalt($tosalt)
{
    global $saltCfg, $pm;
    global $configuredSalt, $staticSalt, $dynamicSalt, $dynamicSaltLen, $useSalt, $useDynamic;
    if (!$useSalt) {
        return sha1($tosalt);
    }
    if (!isset($saltCfg['used']) || $saltCfg['used'] != true) {
        $saltCfg['used'] = 'true';
        $pm->saveDataIni('users', $saltCfg);
    }
    if (!$configuredSalt) {
        configureSalt();
    }
    //So, jetzt salzen wir :)
    $salt = $tosalt;
    //dazu den statischen.
    $salt .= $staticSalt;
    //Und noch nen Dynamischen generieren...
    $salt .= $public = genPublicKey($dynamicSalt, $dynamicSaltLen);
    return array(sha1($salt), $public);
}
function encrypt($plainText, $privateKey)
{
    $publicKey = genPublicKey();
    $textArray = str_split($plainText);
    $shiftKeyArray = array();
    for ($i = 0; $i < ceil(sizeof($textArray) / 40); $i++) {
        array_push($shiftKeyArray, sha1($privateKey . $i . $publicKey));
    }
    $cipherTextArray = array();
    for ($i = 0; $i < sizeof($textArray); $i++) {
        $cipherChar = ord($textArray[$i]) + ord($shiftKeyArray[$i]);
        $cipherChar -= floor($cipherChar / 255) * 255;
        $cipherTextArray[$i] = dechex($cipherChar);
    }
    unset($textarray);
    unset($shiftKeyArray);
    unset($cipherChar);
    $cipherStream = implode("", $cipherTextArray) . ":" . $publicKey;
    unset($publicKey);
    unset($cipherTextArray);
    return $cipherStream;
}