C# で、以下のような処理で数字を暗号化し、
これをテキストファイルに書き込んでウェブサーバーにFTPします。
{
string encrypted = sub("1234"); // なにか4桁の数字
// encryptedを埋め込んだテキストファイルを作成し // FTPでウェブサーバーにアップロードする
}
void sub(string source)
{
string password = "encryptkey";
RijndaelManaged rijndael = new RijndaelManaged();
byte[] key, iv;
GenerateKeyFromPassword(password, rijndael.KeySize, out key, rijndael.BlockSize, out iv);
rijndael.Key = key;
rijndael.IV = iv;
byte[] strBytes = Encoding.UTF8.GetBytes(source);
ICryptoTransform encryptor = rijndael.CreateEncryptor();
byte[] encBytes = encryptor.TransformFinalBlock(strBytes, 0, strBytes.Length);
encryptor.Dispose();
string encrypted = Convert.ToBase64String(encBytes);
string encrypted = Convert.ToBase64String(encBytes);
}
void GenerateKeyFromPassword(string password, int keySize, out byte[] key, int blockSize, out byte[] iv)
{
byte[] salt = Encoding.UTF8.GetBytes("12345678");
Rfc2898DeriveBytes deriveBytes = new Rfc2898DeriveBytes(password, salt);
deriveBytes.IterationCount = 1000;
key = deriveBytes.GetBytes(keySize / 8);
iv = deriveBytes.GetBytes(blockSize / 8);
}
そのテキストファイルをウェブクライアントのjQueryで読み込んで復号し、
jQuery内で保持している数字と比較したいのですが、
jQueryで復号する方法が分かりません。
CryptoJSでできそうな気がしていて、
例えばネットで拾った
var key = CryptoJS.PBKDF2('encryptkey', salt, {keySize: 256 / 8, iterations: 1000 });
var options = {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7};
var decrypted = CryptoJS.AES.decrypt({ciphertext:encrypted}, key, options);
などが使えそうに思ったのですが、
この場合、saltとivの値が分かりません。
C#の方でsaltとivはbyte配列で求められているので、
これをint32配列に変換したものを試しにjQueryにベタ書きして渡してみたのですが、
CryptoJS.PBKDF2()が"Cannot read preoperty 'length' of undefined"例外を起こします。
上記のソースの問題点のご指摘でも、まったく別のアプローチでも結構です。
C#で暗号化した値をjavascriptで復号化する方法をご教授ください。
よろしくお願い致します。
因みに、jQuery内で比較値をベタで保持した場合にクライアントでは隠しようのないことは、
とりあえずここでは問題にしません。
あくまで暗号化/復号化の方法に焦点を当てたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/02 03:54