Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Mizter Egoist 09.06.2018 21:41
За основу взята эта запись Sumo, решил немного развить для своих нужд и предоставить в общее пользование, может кому пригодится, а может что-то предложите.@CLASS crypt @OPTIONS dynamic ################################################################ ## ## $crypt[^_classes[crypt;$options]] ## ## $encrypt[^crypt.encrypt[$string;$secret][ ## $.type[aes|des] ## $.encode[hex|base64] ## ]] ## ## $decrypt[^crypt.decrypt[$encrypt;$secret][ ## $.type[aes|des] ## $.encode[hex|base64] ## ]] ## ## $token[^crypt.makeToken[$hash;$secret][ ## $.type[aes|des] ## $.encode[hex|base64] ## ]] ## ## $validate[^crypt.validateToken[$token;$secret][ ## $.type[aes|des] ## $.encode[hex|base64] ## ]] ## ################################################################ @create[options] $mysql[^_classes[mysql;$options]] @encrypt[data;secret;options][locals] $options[^hash::create[$options]] $result[^mysql.sql[string]{ select sql_no_cache ^if($options.encode eq 'hex'){hex} ^if($options.encode eq 'base64'){to_base64} ( ^if($options.type eq 'aes'){aes_encrypt} ^if($options.type eq 'des'){des_encrypt} ('^taint[$data]', '^taint[$secret]') ) }] @decrypt[data;secret;options][locals] $options[^hash::create[$options]] $result[^mysql.sql[string]{ select sql_no_cache ^if($options.type eq 'aes'){aes_decrypt} ^if($options.type eq 'des'){des_decrypt} ( ^if($options.encode eq 'hex'){unhex} ^if($options.encode eq 'base64'){from_base64} ('^taint[$data]'), '^taint[$secret]' ) }] @makeToken[data;secret;options][locals] $options[^hash::create[$options]] $result[^data.foreach[k;v]{${k}=${v}}[|]] $result[^encrypt[${result}|^math:crypt[$result|$secret;^$apr1^$];$secret][ $.type[$options.type] $.encode[$options.encode] ]] @validateToken[token;secret;options][locals] $result[^hash::create[]] $options[^hash::create[$options]] $token[^decrypt[^token.trim[both];$secret][ $.type[$options.type] $.encode[$options.encode] ]] $parts[^token.split[|;lv]] ^if($parts < 2){^throw[invalid;invalid token]} ^parts.foreach[k;v]{ $str[$v.piece] $key[^str.match[(.+)\=(.+)][g]{$match.1}] $value[^str.match[(.+)\=(.+)][g]{$match.2}] ^if($k == ($parts - 1)){ $signature[$v.piece] ^break[] } $result.[$key][$value] } $data[^token.left(^token.length[] - ^signature.length[] - 1)] ^if(!def $signature || $signature ne ^math:crypt[${data}|$secret;$signature]){ ^throw[invalid;invalid token] }