@@ -3762,45 +3762,82 @@ String.prototype.toKeywords = String.prototype.keywords = function(forSearch, al
37623762 return exports . keywords ( this , forSearch , alternative , max_count , max_length , min_length ) ;
37633763} ;
37643764
3765- const CRYPTO = { } ;
3765+ function checksum ( val ) {
3766+ var sum = 0 ;
3767+ for ( var i = 0 ; i < val . length ; i ++ )
3768+ sum += val . charCodeAt ( i ) ;
3769+ return sum ;
3770+ }
37663771
37673772String . prototype . encrypt = function ( key , isUnique ) {
3773+ var str = '0' + this ;
3774+ var data_count = str . length ;
3775+ var key_count = key . length ;
3776+ var random = isUnique ? exports . random ( 120 ) + 40 : 65 ;
3777+ var count = data_count + ( random % key_count ) ;
3778+ var values = [ ] ;
3779+ var index = 0 ;
3780+
3781+ values [ 0 ] = String . fromCharCode ( random ) ;
3782+
3783+ var counter = this . length + key . length ;
37683784
3769- if ( ! CRYPTO [ key ] ) {
3770- var size = F . config [ 'default-crypto-key' ] ;
3771- CRYPTO [ key ] = Buffer . alloc ( size , key . length > size ? key . substring ( 0 , size ) : key , 'utf8' ) ;
3785+ for ( var i = count - 1 ; i > 0 ; i -- ) {
3786+ index = str . charCodeAt ( i % data_count ) ;
3787+ values [ i ] = String . fromCharCode ( index ^ ( key . charCodeAt ( i % key_count ) ^ random ) ) ;
37723788 }
37733789
3774- var cipher = Crypto . createCipheriv ( F . config [ 'default-crypto' ] , CRYPTO [ key ] , CRYPTO [ key ] ) ;
3775- var str = this . toString ( ) ;
3776- var plus = isUnique ? '_' + GUID ( 10 ) : '' ;
3777- return cipher . update ( plus + str . hash ( ) + '#' + str , 'utf8' , 'hex' ) + cipher . final ( 'hex' ) ;
3790+ str = exports . createBuffer ( counter + '=' + values . join ( '' ) , ENCODING ) . toString ( 'hex' ) ;
3791+ var sum = 0 ;
3792+
3793+ for ( var i = 0 ; i < str . length ; i ++ )
3794+ sum += str . charCodeAt ( i ) ;
3795+
3796+ return ( sum + checksum ( F . config . secret + key ) ) + '-' + str ;
37783797} ;
37793798
37803799String . prototype . decrypt = function ( key ) {
37813800
3782- if ( ! CRYPTO [ key ] ) {
3783- var size = F . config [ 'default-crypto-key' ] ;
3784- CRYPTO [ key ] = Buffer . alloc ( size , key . length > size ? key . substring ( 0 , size ) : key , 'utf8' ) ;
3785- }
3801+ var index = this . indexOf ( '-' ) ;
3802+ if ( index === - 1 )
3803+ return null ;
37863804
3787- var result ;
3805+ var cs = + this . substring ( 0 , index ) ;
3806+ if ( ! cs || isNaN ( cs ) )
3807+ return null ;
37883808
3789- try {
3790- var decipher = Crypto . createDecipheriv ( F . config [ 'default-crypto' ] , CRYPTO [ key ] , CRYPTO [ key ] ) ;
3791- result = decipher . update ( this , 'hex' ) + decipher . final ( ) ;
3792- } catch ( e ) {
3809+ var hash = this . substring ( index + 1 ) ;
3810+ var sum = checksum ( F . config . secret + key ) ;
3811+ for ( var i = 0 ; i < hash . length ; i ++ )
3812+ sum += hash . charCodeAt ( i ) ;
3813+
3814+ if ( sum !== cs )
37933815 return null ;
3794- }
37953816
3796- var beg = result . indexOf ( '#' ) ;
3797- if ( beg === - 1 )
3817+ var values = exports . createBuffer ( hash , 'hex' ) . toString ( ENCODING ) ;
3818+ var index = values . indexOf ( '=' ) ;
3819+ if ( index === - 1 )
3820+ return null ;
3821+
3822+ var counter = + values . substring ( 0 , index ) ;
3823+ if ( isNaN ( counter ) )
37983824 return null ;
3799- var o = result . substring ( beg + 1 ) ;
3800- var sum = result . substring ( 0 , beg ) ;
3801- if ( sum [ 0 ] === '_' )
3802- sum = sum . substring ( 11 ) ;
3803- return + sum == o . hash ( ) ? o : null ;
3825+
3826+ values = values . substring ( index + 1 ) ;
3827+
3828+ var count = values . length ;
3829+ var random = values . charCodeAt ( 0 ) ;
3830+ var key_count = key . length ;
3831+ var data_count = count - ( random % key_count ) ;
3832+ var decrypt_data = [ ] ;
3833+
3834+ for ( var i = data_count - 1 ; i > 0 ; i -- ) {
3835+ index = values . charCodeAt ( i ) ^ ( random ^ key . charCodeAt ( i % key_count ) ) ;
3836+ decrypt_data [ i ] = String . fromCharCode ( index ) ;
3837+ }
3838+
3839+ var val = decrypt_data . join ( '' ) ;
3840+ return counter !== ( val . length + key . length ) ? null : val ;
38043841} ;
38053842
38063843String . prototype . base64ToFile = function ( filename , callback ) {
@@ -5993,4 +6030,5 @@ exports.Callback = function(count, callback) {
59936030} ;
59946031
59956032global . WAIT = exports . wait ;
5996- ! global . F && require ( './index' ) ;
6033+ ! global . F && require ( './index' ) ;
6034+
0 commit comments