2016-10-17 3 views
0

私はC#でファイルを暗号化して解読するコードを持っています。今私は暗号化タスクをフロントエンドに移動する必要があります.xlsxファイルを暗号化するためにJavaScriptコードを書く必要があります。C#暗号化メカニズムコードをjavascriptに変換します

function wordsToBytes (words) { 
     for (var bytes = [], b = 0; b < words.length * 32; b += 8) 
      bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF); 
     return bytes; 
    } 
    var temp = CryptoJS.enc.Utf16.parse('myKey123'); 
    var key = wordsToBytes(temp.words); 
:私はまた、以下のようにUTF16キーを変換する試み

var reader = new FileReader(); 
    reader.onload = function (e) { 

     var encrypted = CryptoJS.AES.encrypt(e.target.result, 'myKey123'); 

     var data = new FormData(); 


     var encryptedFile = new File([encrypted], file.name, { type: "text/plain", lastModified: new Date() }); 

     data.append('file', encryptedFile); 

     $.ajax({ 
      url: 'http://localhost:57691/api/WithKey/UploadFile', 
      data: data, 
      cache: false, 
      contentType: false, 
      processData: false, 
      type: 'POST', 
      success: function (data) { 
       debugger; 
      } 
     }); 
    }; 

    reader.readAsDataURL(file); 

private void EncryptFile(string inputFile, string outputFile) 
    { 

     try 
     { 
      string password = @"myKey123"; // Your Key Here 
      UnicodeEncoding UE = new UnicodeEncoding(); 
      byte[] key = UE.GetBytes(password); 

      string cryptFile = outputFile; 
      FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create); 

      RijndaelManaged RMCrypto = new RijndaelManaged(); 

      CryptoStream cs = new CryptoStream(fsCrypt, 
       RMCrypto.CreateEncryptor(key, key), 
       CryptoStreamMode.Write); 

      FileStream fsIn = new FileStream(inputFile, FileMode.Open); 

      int data; 
      while ((data = fsIn.ReadByte()) != -1) 
       cs.WriteByte((byte)data); 


      fsIn.Close(); 
      cs.Close(); 
      fsCrypt.Close(); 
     } 
     catch(Exception ex) 
     { 
      // MessageBox.Show("Encryption failed!", "Error"); 
     } 
    } 

    private void DecryptFile(string inputFile, string outputFile) 
    { 

     { 
      string password = @"myKey123"; // Your Key Here 

      UnicodeEncoding UE = new UnicodeEncoding(); 
      byte[] key = UE.GetBytes(password); 

      FileStream fsCrypt = new FileStream(inputFile, FileMode.Open); 

      RijndaelManaged RMCrypto = new RijndaelManaged(); 

      CryptoStream cs = new CryptoStream(fsCrypt, 
       RMCrypto.CreateDecryptor(key, key), 
       CryptoStreamMode.Read); 

      FileStream fsOut = new FileStream(outputFile, FileMode.Create); 

      int data; 
      while ((data = cs.ReadByte()) != -1) 
       fsOut.WriteByte((byte)data); 

      fsOut.Close(); 
      cs.Close(); 
      fsCrypt.Close(); 

     } 
    } 

Iは、以下のようにJavaScriptで暗号化を作成しようとした:以下の暗号化および復号化のためのC#コードであります

しかし運はありません。私が間違っているところで誰かが私を助けてくれますか? C#で同じようにjavascriptでファイルを暗号化する正しい方法は何ですか?

+0

は、なぜあなたはHTTPSを使用する代わりに、これをしたいですか?あなたのC#コードが漏れても、処分する必要があるものはすべて処分しないでください。 –

+0

私はなぜ[this one](http://stackoverflow.com/q/40055398/1816580)のような同様の質問をするために新しいアカウントを作成したのだろうと思います。とにかく、なぜこのC#コードを移植する必要がありますか?それはひどいです。いくつかの言語で実装されている[RNCryptor](https://github.com/RNCryptor)を使ってみませんか? –

答えて

1

これは、C#コードと同じ暗号テキストを生成するJavaScriptコードです。残っている問題は、何とかこれを送信する必要があるということです。

var keyWords = CryptoJS.enc.Utf16LE.parse("myKey123"); 
 
var encryptedWords = CryptoJS.AES.encrypt("some string", keyWords, { iv: keyWords }).ciphertext; 
 
console.log("Hex: " + encryptedWords.toString()); 
 
console.log("Base64: " + encryptedWords.toString(CryptoJS.enc.Base64));
<script src="https://cdn.rawgit.com/CryptoStore/crypto-js/3.1.2/build/rollups/aes.js"></script> 
 
<script src="https://cdn.rawgit.com/CryptoStore/crypto-js/3.1.2/build/components/enc-utf16-min.js"></script>

関連する問題