UProLa

Неокріпші думки

Dual code. Шифрування Rijndael

with 2 comments

Виявилось, не будь-який алгоритм можна спростити F#-ом. Іноді сильний внесок у реалізацію вносить технологія. Зараз приведу приклад одного метода, написаного на трьох мовах у технології .NET: C#, F# і IronPython.

public static byte[] EncryptByteArray(byte[] data, string key)
{
var rijnd = Rijndael.Create();
var ct = rijnd.CreateEncryptor(
(new PasswordDeriveBytes(key, null)).GetBytes(16),
new byte[16]);

var ms = new MemoryStream();
var cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);

cs.Write(data, 0, data.Length);
cs.FlushFinalBlock();

return ms.ToArray();
}
    let EncryptByteArray data (key:string) =
begin
let rijnd = Rijndael.Create();
let ct = rijnd.CreateEncryptor(
(new PasswordDeriveBytes(key, null)).GetBytes(16),
Array.zeroCreate 10);

let ms = new MemoryStream ();
let cs = new CryptoStream (ms, ct, CryptoStreamMode.Write);

cs.Write(data, 0, data.Length);
cs.FlushFinalBlock();

ms.ToArray()
end
def EncryptByteArray (data, key):
rijnd = Rijndael.Create();
ct = rijnd.CreateEncryptor(
(PasswordDeriveBytes(key, None)).GetBytes(16),
Array[Byte](range(10)));

ms = MemoryStream();
cs = CryptoStream(ms, ct, CryptoStreamMode.Write);

cs.Write(data, 0, data.Length);
cs.FlushFinalBlock();

return ms.ToArray();

Потрібно пам’ятати, що ML мови є досить гармонічними, проте не спрощують код ЗАВЖДИ. А є випадки, коли навпаки – ускладнюють. Але про це в інший раз.

Пітон версію приведено для тих, хто вважав що на Пітоні код буде простішим.

PS. begin, end і крапки з комою у F# версії додані чисто для приколу. Якщо використовувати синтаксис #light, то їх нафіг не потрібно.

Written by danbst

Жовтень 4, 2011 at 19:41

Оприлюднено в Програмування

Tagged with , , ,

Відповідей: 2

Subscribe to comments with RSS.

  1. Та взагалі всі ООП мови схожі як дві краплі води. Навіть на JavaScript в якому найзбоченіше ООП з відомих людству код виглядав би як на C# за виключенням заголовка функції.

    bunyk

    Жовтень 4, 2011 at 23:54

    • Це точно.

      Основною причиною “невдачі” я вважаю саме dot-notation. Простий імператив легко (відносно легко) би згорнувся у функціонал.

      danbst

      Жовтень 5, 2011 at 16:46


Залишити відповідь

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: