Advertisement
Guest User

Rsa encrypt

a guest
Aug 24th, 2017
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var RSAPublicKey = function($modulus_hex, $encryptionExponent_hex) {
  2.     this.modulus = new BigInteger( $modulus_hex, 16);
  3.     this.encryptionExponent = new BigInteger( $encryptionExponent_hex, 16);
  4. };
  5.  
  6. var Base64 = {
  7.     base64: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
  8.     encode: function($input) {
  9.         if (!$input) {
  10.             return false;
  11.         }
  12.         var $output = "";
  13.         var $chr1, $chr2, $chr3;
  14.         var $enc1, $enc2, $enc3, $enc4;
  15.         var $i = 0;
  16.         do {
  17.             $chr1 = $input.charCodeAt($i++);
  18.             $chr2 = $input.charCodeAt($i++);
  19.             $chr3 = $input.charCodeAt($i++);
  20.             $enc1 = $chr1 >> 2;
  21.             $enc2 = (($chr1 & 3) << 4) | ($chr2 >> 4);
  22.             $enc3 = (($chr2 & 15) << 2) | ($chr3 >> 6);
  23.             $enc4 = $chr3 & 63;
  24.             if (isNaN($chr2)) $enc3 = $enc4 = 64;
  25.             else if (isNaN($chr3)) $enc4 = 64;
  26.             $output += this.base64.charAt($enc1) + this.base64.charAt($enc2) + this.base64.charAt($enc3) + this.base64.charAt($enc4);
  27.         } while ($i < $input.length);
  28.         return $output;
  29.     },
  30.     decode: function($input) {
  31.         if(!$input) return false;
  32.         $input = $input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
  33.         var $output = "";
  34.         var $enc1, $enc2, $enc3, $enc4;
  35.         var $i = 0;
  36.         do {
  37.             $enc1 = this.base64.indexOf($input.charAt($i++));
  38.             $enc2 = this.base64.indexOf($input.charAt($i++));
  39.             $enc3 = this.base64.indexOf($input.charAt($i++));
  40.             $enc4 = this.base64.indexOf($input.charAt($i++));
  41.             $output += String.fromCharCode(($enc1 << 2) | ($enc2 >> 4));
  42.             if ($enc3 != 64) $output += String.fromCharCode((($enc2 & 15) << 4) | ($enc3 >> 2));
  43.             if ($enc4 != 64) $output += String.fromCharCode((($enc3 & 3) << 6) | $enc4);
  44.         } while ($i < $input.length);
  45.         return $output;
  46.     }
  47. };
  48.  
  49. var Hex = {
  50.     hex: "0123456789abcdef",
  51.     encode: function($input) {
  52.         if(!$input) return false;
  53.         var $output = "";
  54.         var $k;
  55.         var $i = 0;
  56.         do {
  57.             $k = $input.charCodeAt($i++);
  58.             $output += this.hex.charAt(($k >> 4) &0xf) + this.hex.charAt($k & 0xf);
  59.         } while ($i < $input.length);
  60.         return $output;
  61.     },
  62.     decode: function($input) {
  63.         if(!$input) return false;
  64.         $input = $input.replace(/[^0-9abcdef]/g, "");
  65.         var $output = "";
  66.         var $i = 0;
  67.         do {
  68.             $output += String.fromCharCode(((this.hex.indexOf($input.charAt($i++)) << 4) & 0xf0) | (this.hex.indexOf($input.charAt($i++)) & 0xf));
  69.         } while ($i < $input.length);
  70.         return $output;
  71.     }
  72. };
  73.  
  74. var RSA = {
  75.  
  76.     getPublicKey: function( $modulus_hex, $exponent_hex ) {
  77.         return new RSAPublicKey( $modulus_hex, $exponent_hex );
  78.     },
  79.  
  80.     encrypt: function($data, $pubkey) {
  81.         if (!$pubkey) return false;
  82.         $data = this.pkcs1pad2($data,($pubkey.modulus.bitLength()+7)>>3);
  83.         if(!$data) return false;
  84.         $data = $data.modPowInt($pubkey.encryptionExponent, $pubkey.modulus);
  85.         if(!$data) return false;
  86.         $data = $data.toString(16);
  87.         if(($data.length & 1) == 1)
  88.             $data = "0" + $data;
  89.         return Base64.encode(Hex.decode($data));
  90.     },
  91.  
  92.     pkcs1pad2: function($data, $keysize) {
  93.         if($keysize < $data.length + 11)
  94.             return null;
  95.         var $buffer = [];
  96.         var $i = $data.length - 1;
  97.         while($i >= 0 && $keysize > 0)
  98.             $buffer[--$keysize] = $data.charCodeAt($i--);
  99.         $buffer[--$keysize] = 0;
  100.         while($keysize > 2)
  101.             $buffer[--$keysize] = Math.floor(Math.random()*254) + 1;
  102.         $buffer[--$keysize] = 2;
  103.         $buffer[--$keysize] = 0;
  104.         return new BigInteger($buffer);
  105.     }
  106. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement