Türkçe
  • crypto
  • edge

Node.js crypto'dan Web Crypto API'ye Geçiş: Rehberli bir deneyim

Kripto’dan Web Crypto API’ye geçiş deneyimine derin bir dalış yapın ve 3 yaygın senaryoya odaklanan kapsamlı bir rehber sunun.

Sijie
Sijie
Developer

Giriş

Web Crypto API, yeni bir Javascript şifreleme aracıdır. Çağdaş tarayıcılar ve önde gelen platformlarla (örneğin Cloudflare Workers ve Vercel) ve ayrıca Node.js ile uyumludur. Bu tür bir etkileşimli çalışma, bir geliştiricinin hayalini gerçekleştirir - şifreleme kodunuzu bir kez yazın ve Web Crypto API sını kullanarak birçok farklı platformda çalıştırın.

Ancak, Node.js'in uzun bir geçmişi olan bir "crypto" modülü zaten mevcut ve göç ettirilmesi gereken önemli miktarda eski kod bırakıyor. Bu makalede, 3 yaygın duruma odaklanan kapsamlı bir rehber sunarak geçiş deneyimine dalarız. Başarılı bir göçe yol göstermeyi amaçlıyoruz.

Web Crypto API nedir

Web Crypto API, JavaScript için W3C tarafından açık bir standarttır ve Web Cryptography API specification'da tanımlanan standartlaştırılmış kriptografi ilkellerini içerir. Birkaç tarayıcı ve platform kendi uyumsuz şifreleme işlevlerini ekledikten sonra oluşturulmuştur.

API, anahtar oluşturma, şifreleme ve deşifreleme, dijital imzalar, anahtar ve bit türetme ve kriptografik özet için ilkellikler sağlar. SubtleCrypto adında bir arayüzün etrafına odaklanmıştır. Ve dahası, Mozilla MDN belgelerinde daha fazla detay ve öğretici bulabilirsiniz.

Ancak Node.js zaten crypto modüle sahip?

Node.js geliştiricileri genellikle crypto module ile tanıdıktır. Kapsamlı bir dizi kriptografik ilkel seti sunar. Bu modül, Web Crypto API'de tanımlanan aynı kriptografik işlemler için mekanizmalar sağlamakla kalmaz, genellikle daha geniş bir kriptografik algoritma yelpazesi içerir.

Peki neden hala Web Crypto API'ye ihtiyacımız var? Javascript, istemci tarafından sunuculara ve özellikle kenara kadar birçok platform ve ortamda popüler hale geldikçe, işlemleri basitleştirmek için çapraz platformlu bir şifreleme aracına sahip olmak önemlidir.

Ek olarak, Web Crypto API standardındaki tüm işlevler promise'leri döndürür ve async/await sözdizimini destekler. Bunlar, etkinlik döngüsünü engelleyebilen senkron ve crypto modülüne ciddi bir avantaj sağlar.

Ve ilginç bir durum ki Node.js, Web Crypto API'ye destek ekler, bu, çoğu durumda, Web Crypto API'nin çoğu bilinen platformda kusursuz olduğu anlamına gelir.

Web Crypto API Kullanımı

Çoğu platformda, Web Crypto API'lerinin koleksiyonu global crypto nesnesi aracılığıyla erişilebilir, bu ki 3 üst düzey yardımcı programı içerir: getRandomValues, randomUUID ve subtle.

Bu, geleneksel crypto modülü ile karşılaştırıldığında birçok farklılık vardır. Bunlar genellikle 3 yaygın parçaya özetlenebilir. Geçelim ve var olan koddan nasıl geçeceğimizi görün.

#1 Rastgele değerler oluşturma

Crypto modülünde, randomBytes fonksiyonunu çağırarak rastgele değerler oluşturabilirsiniz.

Web Crypto'da getRandomValues adlı benzer bir işlev vardır, ancak döndürülen değer bir ArrayBuffer dir, bu yüzden bunu dizeye dönüştürmek için başka bir adıma ihtiyacımız var.

#2 Hashing (veya özet)

Crypto modülünde createHash kullanımı kolaydır:

Web Crypto' da, subtle.createHash kullanabiliriz.

Gördüğünüz gibi, ArrayBufferdan hex dizesine dönüşüm de gereklidir.

###3 Şifreleme ve deşifreleme

Crypto modülünde AES şifrelemesi ve deşifrelemesi şu şekilde gerçekleştirilebilir:

Web Crypto'da, öncelikle importKey ile anahtar oluşturmamız gerekiyor:

Sonuç

Gördüğünüz gibi, göç etmek zor değil, ana iş yeni API'ye uymak için sözdizimini değiştirmek ve TextEncoder ile ArrayBuffer'ı çözmektir.

Bir kimlik ürünü olan Logto, birçok yerde kriptografi kullanmaktadır. Crypto modülünden Web Crypto API'ye geçiş yaptık. Bu geçiş, bizi daha iyi kenar ortamlarına adapte etme ve SDK kodunu tarayıcıda güvenli bir şekilde çalıştırma olanağı sağlar.