У меня есть этот файл SWF, и я нашел этот код. Я хочу знать, как это работает. Любая помощь будет высоко оценена.
public function encrypt(param1:String, param2:String) : String
{
var _loc8_:Number = NaN;
var _loc9_:Number = NaN;
var _loc12_:* = NaN;
var _loc3_:Array = Convert.strToLongs(param1);
var _loc4_:Array = Convert.strToLongs(param2);
var _loc5_:Number = _loc3_.length;
if(_loc5_ == 0)
{
return "";
}
if(_loc5_ == 1)
{
_loc3_[_loc5_++] = 0;
}
var _loc6_:Number = _loc3_[_loc5_ - 1];
var _loc7_:Number = _loc3_[0];
var _loc10_:Number = Math.floor(6 + 52 / _loc5_);
var _loc11_:* = 0;
while(_loc10_-- > 0)
{
_loc11_ = Number(_loc11_ + this.delta);
_loc9_ = _loc11_ >>> 2 & 3;
_loc12_ = 0;
while(_loc12_ < _loc5_ - 1)
{
_loc7_ = _loc3_[_loc12_ + 1];
_loc8_ = (_loc6_ >>> 5 ^ _loc7_ << 2) + (_loc7_ >>> 3 ^ _loc6_ << 4) ^ (_loc11_ ^ _loc7_) + (_loc4_[_loc12_ & 3 ^ _loc9_] ^ _loc6_);
_loc6_ = _loc3_[_loc12_] = _loc3_[_loc12_] + _loc8_;
_loc12_++;
}
_loc7_ = _loc3_[0];
_loc8_ = (_loc6_ >>> 5 ^ _loc7_ << 2) + (_loc7_ >>> 3 ^ _loc6_ << 4) ^ (_loc11_ ^ _loc7_) + (_loc4_[_loc12_ & 3 ^ _loc9_] ^ _loc6_);
_loc6_ = _loc3_[_loc5_ - 1] = _loc3_[_loc5_ - 1] + _loc8_;
}
return Convert.longsToHex(_loc3_);
}
На самом деле я хочу расшифровать этот хэш
c80cebe419dbcdf34f05c5a41023160eda5e0be9e146dcb5c15fabc1ec0b9128
поэтому я немного учусь, но о шифровании.
Я знаю, что хэш-код является односторонним шифрованием, но я не думаю, что этот хэш-код является односторонним шифрованием, поскольку чуть ниже этой функции доступна функция дешифрования.
public function decrypt(param1:String, param2:String) : String
{
var _loc8_:Number = NaN;
var _loc9_:Number = NaN;
var _loc12_:Number = NaN;
var _loc3_:Array = Convert.hexToLongs(param1);
var _loc4_:Array = Convert.strToLongs(param2);
var _loc5_:Number = _loc3_.length;
if(_loc5_ == 0)
{
return "";
}
var _loc6_:Number = _loc3_[_loc5_ - 1];
var _loc7_:Number = _loc3_[0];
var _loc10_:Number = Math.floor(6 + 52 / _loc5_);
var _loc11_:Number = _loc10_ * this.delta;
while(_loc11_ != 0)
{
_loc9_ = _loc11_ >>> 2 & 3;
_loc12_ = _loc5_ - 1;
while(_loc12_ > 0)
{
_loc6_ = _loc3_[_loc12_ - 1];
_loc8_ = (_loc6_ >>> 5 ^ _loc7_ << 2) + (_loc7_ >>> 3 ^ _loc6_ << 4) ^ (_loc11_ ^ _loc7_) + (_loc4_[_loc12_ & 3 ^ _loc9_] ^ _loc6_);
_loc7_ = _loc3_[_loc12_] = _loc3_[_loc12_] - _loc8_;
_loc12_--;
}
_loc6_ = _loc3_[_loc5_ - 1];
_loc8_ = (_loc6_ >>> 5 ^ _loc7_ << 2) + (_loc7_ >>> 3 ^ _loc6_ << 4) ^ (_loc11_ ^ _loc7_) + (_loc4_[_loc12_ & 3 ^ _loc9_] ^ _loc6_);
_loc7_ = _loc3_[0] = _loc3_[0] - _loc8_;
_loc11_ = _loc11_ - this.delta;
}
return Convert.longsToStr(_loc3_);
}