জাভাস্ক্রিপ্ট স্ট্রিং এনক্রিপশন এবং ডিক্রিপশন?


152

আমি ব্যক্তিগত ব্যবহারের জন্য একটি ছোট অ্যাপ তৈরি করতে আগ্রহী যা জাভাস্ক্রিপ্ট ব্যবহার করে ক্লায়েন্টের পক্ষ থেকে তথ্য এনক্রিপ্ট এবং ডিক্রিপ্ট করবে। এনক্রিপ্ট করা তথ্য একটি সার্ভারে একটি ডাটাবেসে সংরক্ষণ করা হবে, তবে কখনই ডিক্রিপ্ট করা সংস্করণ হবে না।

এটি সুপার ডুপার সুরক্ষিত হতে হবে না, তবে আমি বর্তমানে একটি অখণ্ড অ্যালগরিদম ব্যবহার করতে চাই।

আদর্শভাবে আমি এমন কিছু করতে সক্ষম হব

var gibberish = encrypt(string, salt, key);

এনকোডেড স্ট্রিং তৈরি করতে এবং এর মতো কিছু

var sensical = decrypt(gibberish, key);

পরে এটি ডিকোড করতে।

এখনও অবধি আমি এটি দেখেছি: http://bitwiseshiftleft.github.io/sjcl/

অন্য কোন লাইব্রেরি আমার দিকে নজর দেওয়া উচিত?




10
এখানে কিছু পরিভাষা বন্ধ রয়েছে, এখানে একটি সাধারণ সংস্করণ 1.. লবণের তথ্য (সাধারণত পাসওয়ার্ডগুলি) ধোয়ার সাথে যুক্ত করা হয়। তাদের উদ্দেশ্য হ্যাশটির চেয়ে লবণ ছাড়াই আলাদা করা। এটি দরকারী কারণ এটি যদি আপনার ডাটাবেস হ্যাক হয়ে যায় এবং ব্যবহারকারী পাসওয়ার্ডগুলি হ্যাশ হয়ে যায় তবে এটি হ্যাশগুলির প্রাক-উত্পন্ন। ২. হ্যাশিং একটি একমুখী অপারেশন যা আউটপুটকে ইনপুট অনুবাদ করে। এটি সহজেই বিপরীত বা পূর্বাবস্থায় ফেরা যায় না। ৩. এনকোডিং এনক্রিপশন নয়। base64_encode, urlencode, ইত্যাদি
দেস

উত্তর:


160

 var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
//U2FsdGVkX18ZUVvShFSES21qHsQEqZXMxQ9zgHy+bu0=

var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase");
//4d657373616765


document.getElementById("demo1").innerHTML = encrypted;
document.getElementById("demo2").innerHTML = decrypted;
document.getElementById("demo3").innerHTML = decrypted.toString(CryptoJS.enc.Utf8);
Full working sample actually is:

    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js" integrity="sha256-/H4YS+7aYb9kJ5OKhFYPUjSJdrtV6AeyJOtTkw6X72o=" crossorigin="anonymous"></script>

<br><br>
<label>encrypted</label>
<div id="demo1"></div>
<br>

<label>decrypted</label>
<div id="demo2"></div>

<br>
<label>Actual Message</label>
<div id="demo3"></div>


8
এনক্রিপ্ট করা আসলে একটি অবজেক্ট তবে স্ট্রিংটি পেতে আপনি এনক্রিপ্টড.টো স্ট্রিং () কল করতে পারেন। আপনি পরে সেই স্ট্রিংটি ডিক্রিপ্ট করতে সক্ষম হবেন: jsbin.com/kofiqokoku/1
টমাস কিরদা

9
তবে কীভাবে আমরা গোপন পাসফ্রেজটি সুরক্ষিত করতে পারি?
duykhoa

9
দেখে মনে হচ্ছে ক্রিপ্টো জেএস একটি সংরক্ষণাগারবদ্ধ প্রকল্প। গিথুবে একটি ক্লোন রয়েছে: github.com/sytelus/CryptoJS তবে এটি দুই বছরে আপডেট হয়নি। এটি এখনও জেএস এনক্রিপশনের জন্য সেরা বিকল্প?
সিওনিপ

2
আমি এইটির সাথে যাব: github.com/brix/crypto-js এটি এনপিএম এর মাধ্যমেও পাওয়া যায়
টমাস কিরদা

1
আপনি এটি কীভাবে এবং কোথায় সঞ্চয় করবেন তা আপনার উপর নির্ভর করে। ব্রাউজারে এটি সংরক্ষণ করার সত্যিকারের নিরাপদ উপায় আছে কিনা তা আমি জানি না। সার্ভার থেকে তাদের অনুরোধ করুন এবং মেমরিতে সঞ্চয় করুন।
টমাস কিরদা

62

ক্রিপ্টোজেএস সম্পর্কে কীভাবে ?

এটি একটি শক্ত ক্রিপ্টো গ্রন্থাগার, অনেক কার্যকারিতা সহ। এটি হ্যাশারগুলি, এইচএমএসি, পিবিকেডিএফ 2 এবং সিফারগুলি প্রয়োগ করে। এক্ষেত্রে সাইফার্স আপনার যা প্রয়োজন তা হ'ল। প্রকল্পের হোমপেজে দ্রুত-প্রারম্ভের কুইডটি দেখুন।

আপনি এএসএস এর সাথে এমন কিছু করতে পারেন:

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>

<script>
    var encryptedAES = CryptoJS.AES.encrypt("Message", "My Secret Passphrase");
    var decryptedBytes = CryptoJS.AES.decrypt(encryptedAES, "My Secret Passphrase");
    var plaintext = decryptedBytes.toString(CryptoJS.enc.Utf8);
</script>

সুরক্ষা হিসাবে, আমার লেখার মুহুর্তে এইএস অ্যালগরিদমটি অটুট বলে মনে করা হয়

সম্পাদনা করুন:

অনলাইন ইউআরএল ডাউন বলে মনে হচ্ছে এবং আপনি নীচের প্রদত্ত লিঙ্কটি থেকে এনক্রিপশনের জন্য ডাউনলোড করা ফাইলগুলি ব্যবহার করতে পারেন এবং অ্যাপ্লিকেশনটির মূল ফোল্ডারে সংশ্লিষ্ট ফাইলগুলি রাখতে পারেন।

https://code.google.com/archive/p/crypto-js/downloads

বা অন্যান্য সিডিএন ব্যবহার করেছেন যেমন https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/aes-min.js


3.1.2 ফোল্ডারের অধীনে রোলআপগুলি এবং উপাদানগুলির মধ্যে পার্থক্য কী?
কানাগাভেলু সুগুমার

কিছুটা খেলার পরে উপাদানগুলি পৃথক অংশ। এটিকে কার্যকর করার জন্য কোন উপাদানগুলি গ্রহণ করতে হবে (এবং কোন ক্রমে) তা আপনাকে জানতে হবে। রোলআপ ফাইলগুলিতে আপনাকে কেবলমাত্র একটি স্ক্রিপ্ট রেফারেন্স দিয়ে কাজ করার জন্য প্রয়োজনীয় সমস্ত কিছু রয়েছে (হার্ড কাজটি ইতিমধ্যে সম্পন্ন হওয়ায় আরও ভাল)।
শাহর ওড়াদ

2
তবে কীভাবে আমরা গোপন পাসফ্রেজটি সুরক্ষিত করতে পারি?
শাইজুত

@ শায়েজুত আপনি না এমনকি আপনি প্লেটেক্সট এনক্রিপ্ট / ডিক্রিপ্ট করার সময় র‌্যাম ব্যতীত অন্য কোথাও সংরক্ষণ করেন না। পাসফ্রেজটি কেবল ব্যবহারকারীর মস্তিষ্কে (বা একটি পাসওয়ার্ড পরিচালক) সংরক্ষণ করা উচিত
slebetman

39

আমি একটি অনিরাপদ কিন্তু সহজ পাঠ্য সাইফার / ডেসিফার ব্যবহার তৈরি করেছি। কোনও বাহ্যিক গ্রন্থাগারের সাথে কোনও নির্ভরতা নেই।

এই ফাংশন হয়

const cipher = salt => {
    const textToChars = text => text.split('').map(c => c.charCodeAt(0));
    const byteHex = n => ("0" + Number(n).toString(16)).substr(-2);
    const applySaltToChar = code => textToChars(salt).reduce((a,b) => a ^ b, code);

    return text => text.split('')
        .map(textToChars)
        .map(applySaltToChar)
        .map(byteHex)
        .join('');
}

const decipher = salt => {
    const textToChars = text => text.split('').map(c => c.charCodeAt(0));
    const applySaltToChar = code => textToChars(salt).reduce((a,b) => a ^ b, code);
    return encoded => encoded.match(/.{1,2}/g)
        .map(hex => parseInt(hex, 16))
        .map(applySaltToChar)
        .map(charCode => String.fromCharCode(charCode))
        .join('');
}

এবং আপনি সেগুলি নিম্নলিখিত হিসাবে ব্যবহার করতে পারেন:

// To create a cipher
const myCipher = cipher('mySecretSalt')

//Then cipher any text:
myCipher('the secret string')   // --> "7c606d287b6d6b7a6d7c287b7c7a61666f"

//To decipher, you need to create a decipher and use it:
const myDecipher = decipher('mySecretSalt')
myDecipher("7c606d287b6d6b7a6d7c287b7c7a61666f")    // --> 'the secret string'

4
মাইডিসিফার = ডেসিফার ('কার্টেলসিস্টেম') - এই লবণের পাশাপাশি স্ট্রিংটিও ডিকাইফার করবে। আপনাকে 'মাইক্রিটসাল্ট' শব্দটি সঠিকভাবে জানতে হবে না
বার

এছাড়াও, ডেসিফারে লবণের ব্যবহার করা হচ্ছে না?
ড্রার বার

1
তবুও অন্য একটি পোস্ট যেখানে কেউ অন্ধভাবে ব্যবহার করছে let। 😒︎
জন

1
এটি কি) সুপার ভাঙ্গা এবং অনিরাপদ নয় এবং খ) 'লবণ' আসলে আপনার 'সিক্রেট চাবি' কারণ লবণগুলি ব্যক্তিগত হিসাবে প্রত্যাশিত হয় না? আমি মনে করি কোনও মন্তব্য ছাড়াই এই জাতীয় কোড পোস্ট করা খুব বিপজ্জনক যে এই মজাদার কোডটি কোনও বাস্তব বিশ্বের ব্যবহারের জন্য নয়। Upvotes পরিমাণ উদ্বেগজনক। crypto.stackexchange.com/questions/11466/…
lschmierer

1
ওয়েল কমপক্ষে তারা সাউন্ড ক্রিপ্টো ব্যবহার করে। কি করছ মূলত একটি সিজার Chipher (প্রতি অক্ষরে একই কী প্রয়োগের) হল en.wikipedia.org/wiki/Caesar_cipher#Breaking_the_cipher অন্যান্য উত্তর সংক্রান্ত ... আমি এটা সুস্পষ্ট যে কিছু নামক একটি "গোপন" বলে আশা করা হয় গোপনে রাখার প্রত্যাশা করা হয়েছে (ব্যবহারকারীর দ্বারা)
lschmierer

18

এস.জে.সি.এল, ক্রিপ্টোজেএস এবং / অথবা ওয়েবক্রিপ্টো যে উত্তোলন করে তা বিদ্যমান উত্তরগুলি অগত্যা ভুল নয় তবে তারা প্রাথমিকভাবে সন্দেহ করতে পারে ততটা নিরাপদ নয়। সাধারণত আপনি লাইবসোডিয়াম ব্যবহার করতে চান । প্রথমে আমি ব্যাখ্যা করব কেন, তারপরে কীভাবে।

এসজেসিএল, ক্রিপ্টোজেএস, ওয়েবক্রিপ্টো ইত্যাদি কেন নয়?

সংক্ষিপ্ত উত্তর: আপনার এনক্রিপশনটি প্রকৃতপক্ষে সুরক্ষিত হওয়ার জন্য, এই লাইব্রেরিগুলি আপনি অনেকগুলি পছন্দ যেমন প্রত্যাখ্যান করে ব্লক সিফার মোড (সিবিসি, সিটিআর, জিসিএম) আপনি যদি না বলতে পারেন তবে আমি কেবল তালিকাভুক্ত তিনটির মধ্যে কোনটি সুরক্ষিত তা যদি না বলতে পারে ব্যবহার এবং কি সীমাবদ্ধতার অধীনে, আপনি পছন্দের এই ধরনের ভারাক্রান্ত করা উচিত নয় এ সব )।

যদি আপনার কাজের শিরোনাম ক্রিপ্টোগ্রাফি ইঞ্জিনিয়ার না হয় তবে নিরাপদভাবে এটি প্রয়োগের পক্ষে আপনার পক্ষে প্রতিক্রিয়া রয়েছে।

ক্রিপ্টোজেএস এড়াবেন কেন?

ক্রিপ্টোজেএস মুষ্টিমেয় বিল্ডিং ব্লক সরবরাহ করে এবং কীভাবে নিরাপদে সেগুলি ব্যবহার করবেন সে সম্পর্কে আপনি আশা করেন। এমনকি এটি সিবিসি মোডে ডিফল্ট হয় ( সংরক্ষণাগারভুক্ত )।

সিবিসি মোডটি খারাপ কেন?

এইএস-সিবিসি দুর্বলতার বিষয়ে এই লিখনটি পড়ুন ।

ওয়েবক্রিপ্টো এড়িয়ে চলবেন কেন?

ওয়েবক্রিপ্টো হ'ল পটলাক স্ট্যান্ডার্ড, কমিটি দ্বারা ডিজাইন করা, সেই উদ্দেশ্যে যেগুলি ক্রিপ্টোগ্রাফি ইঞ্জিনিয়ারিংয়ের অরথোগোনাল। বিশেষত, ওয়েবক্রিপ্টোকে ফ্ল্যাশ প্রতিস্থাপন করা হয়েছিল, সুরক্ষা সরবরাহ করা হয়নি

এসজেসিএল এড়াবেন কেন?

এসজেসিএলের পাবলিক এপিআই এবং ডকুমেন্টেশন ব্যবহারকারীদের একটি মানব-স্মরণ করা পাসওয়ার্ড সহ ডেটা এনক্রিপ্ট করতে অনুরোধ করে। এটি আসল বিশ্বে আপনি যা করতে চান তা খুব কমই হয়।

অতিরিক্তভাবে: এর ডিফল্ট PBKDF2 রাউন্ড গণনাটি আপনি এটির চেয়ে প্রায় 86 গুণ ছোট । এইএস -128-সিসিএম সম্ভবত ভাল আছে।

উপরের তিনটি বিকল্পের মধ্যে, এসজেসিএল কম কান্নার মধ্যে শেষ হওয়ার সম্ভাবনা রয়েছে। তবে আরও ভাল বিকল্প উপলব্ধ রয়েছে।

লিবসোডিয়াম কেন আরও ভাল?

আপনাকে সাইফার মোড, হ্যাশ ফাংশন এবং অন্যান্য অপ্রয়োজনীয় বিকল্পগুলির একটি মেনু মধ্যে বেছে নেওয়ার দরকার নেই। আপনি কখনই আপনার প্যারামিটারগুলি অনুসন্ধান এবং আপনার প্রোটোকল থেকে সমস্ত সুরক্ষা অপসারণের ঝুঁকি নেবেন না ।

পরিবর্তে, লাইবসোডিয়াম আপনাকে সর্বাধিক সুরক্ষা এবং মিনালিমেস্টিকাল এপিআইয়ের জন্য সহজ বিকল্পগুলি দেয়।

  • crypto_box()/ crypto_box_open()প্রমাণীকৃত পাবলিক-কী এনক্রিপশন প্রস্তাব offer
    • প্রশ্নের আলগোরিদম X25519 (কার্ভ 25519 ওভার ECDH) এবং XSalsa20-Poly1305 একত্রিত করে তবে নিরাপদে এটি ব্যবহারের জন্য আপনাকে জানার (বা এমনকি যত্ন নেওয়া) দরকার নেই
  • crypto_secretbox()/ crypto_secretbox_open()প্রস্তাবিত ভাগ-কী প্রমাণীকরণযুক্ত এনক্রিপশন।
    • প্রশ্নের মধ্যে থাকা অ্যালগরিদমটি এক্সসালসা20-পলি 01305, তবে আপনাকে জানার / যত্ন নেওয়ার দরকার নেই

অতিরিক্তভাবে, কয়েক ডজন জনপ্রিয় প্রোগ্রামিং ল্যাঙ্গুয়েজে লাইবসোডিয়ামের বাইন্ডিং রয়েছে , সুতরাং এটি সম্ভবত খুব সম্ভব যে লিবসোডিয়াম অন্য একটি প্রোগ্রামিং স্ট্যাকের সাথে আন্তঃসংযোগ স্থাপনের চেষ্টা করার সময় কাজ করবে । এছাড়াও, লাইবসোডিয়াম সুরক্ষা ত্যাগ ছাড়াই খুব দ্রুত হতে থাকে।

জাভাস্ক্রিপ্টে লিবসোডিয়াম কীভাবে ব্যবহার করবেন?

প্রথমত, আপনাকে একটি জিনিস সিদ্ধান্ত নিতে হবে:

  1. আপনি কি কেবল ডেটা এনক্রিপ্ট / ডিক্রিপ্ট করতে চান (এবং সম্ভবত এখনও কোনওভাবে প্লেটেক্সটটি ডাটাবেস ক্যোয়ারিতে নিরাপদে ব্যবহার করতে পারেন) এবং বিশদ সম্পর্কে চিন্তা করবেন না? অথবা ...
  2. আপনার কি কোনও নির্দিষ্ট প্রোটোকল প্রয়োগ করতে হবে?

আপনাকে প্রথমে অপশনটি নির্বাচন করা হলে পেতে CipherSweet.js

ডকুমেন্টেশন অনলাইনে উপলব্ধEncryptedFieldবেশিরভাগ ব্যবহারের ক্ষেত্রে যথেষ্ট, তবে আপনার যদি এনক্রিপ্ট করতে চান এমন অনেকগুলি পৃথক ক্ষেত্র যদি থাকে EncryptedRowএবং আপনার EncryptedMultiRowsএপিআইগুলি সহজ হতে পারে।

সিফারসুইট দিয়ে, আপনাকে নিরাপদে কীভাবে ব্যবহার করতে কোন ননস / চতুর্থ তা জানতে হবে না।

অতিরিক্তভাবে, সিফারেক্সট আকারের মাধ্যমে সামগ্রীর বিষয়ে তথ্য ফাঁস না করে এই হ্যান্ডলগুলি int/ floatএনক্রিপশনটি পরিচালনা করে ।

অন্যথায়, আপনি সোডিয়াম-প্লাস চাইবেন , যা বিভিন্ন লাইবসোডিয়াম মোড়কের কাছে ব্যবহারকারী-বান্ধব ফ্রন্টএন্ড। সোডিয়াম-প্লাস আপনাকে পারফরম্যান্ট, অ্যাসিনক্রোনাস, ক্রস-প্ল্যাটফর্ম কোড লিখতে দেয় যা নিরীক্ষণ করা সহজ এবং এর কারণ।

সোডিয়াম-প্লাস ইনস্টল করতে, কেবল চালান ...

npm install sodium-plus

ব্রাউজার সমর্থনের জন্য বর্তমানে কোনও পাবলিক সিডিএন নেই। এটি শীঘ্রই পরিবর্তিত হবে। যাইহোক, আপনি দখল করতে পারেন sodium-plus.min.jsথেকে সর্বশেষ গিটহাব মুক্তি যদি আপনি এটি প্রয়োজন।

const { SodiumPlus } = require('sodium-plus');
let sodium;

(async function () {
    if (!sodium) sodium = await SodiumPlus.auto();
    let plaintext = 'Your message goes here';
    let key = await sodium.crypto_secretbox_keygen();
    let nonce = await sodium.randombytes_buf(24);
    let ciphertext = await sodium.crypto_secretbox(
        plaintext,
        nonce,
        key    
    );
    console.log(ciphertext.toString('hex'));

    let decrypted = await sodium.crypto_secretbox_open(
        ciphertext,
        nonce,
        key
    );

    console.log(decrypted.toString());
})();

সোডিয়াম-প্লাসের জন্য ডকুমেন্টেশনগুলি গিথুবে উপলভ্য।

আপনি যদি একটি ধাপে ধাপে টিউটোরিয়াল চান, এই ডিভ টু নিবন্ধটি আপনি যা খুঁজছেন তা রয়েছে।


16

আধুনিক ব্রাউজারগুলি এখন crypto.subtleএপিআই সমর্থন করে , যা এ জাতীয় কোনও পদ্ধতি ব্যবহার করে নেটিভ এনক্রিপশন এবং ডিক্রিপশন ফাংশন (অ্যাসিঙ্ক আর কম নয়!) সরবরাহ করে: AES-CBC, AES-CTR, AES-GCM, বা RSA-OAEP।

https://www.w3.org/TR/WebCryptoAPI/#dfn-Crypto


3
উপরের বিকল্পগুলির মধ্যে কেবল এইএস-জিসিএম এবং আরএসএ-ওএইপি যুক্তিসঙ্গত। :(
স্কট আর্কিসজেউস্কি

4

এর যে কোনও বাস্তবায়নের আগে দয়া করে স্কট আর্কিসজেউস্কির উত্তর দেখুন

আমি আপনি হতে চান খুব সতর্কতা অবলম্বন হিসাবে আমি কোন নিরাপত্তা জ্ঞান সামান্য আছে (একটা উচ্চ সুযোগ যে আমি নীচে এপিআই অপব্যবহার করছি) কি আমি ভাগ করতে চলেছেন আছি, তাই আমি আরো স্বাগত চেয়ে হতে চাই এই উত্তর আপডেট সম্প্রদায়ের সহায়তায়

@Richardtallent যেমন তার উত্তরে উল্লেখ করেছে, ওয়েব ক্রিপ্টো এপিআইয়ের পক্ষে সমর্থন রয়েছে, সুতরাং এই উদাহরণটি মান ব্যবহার করে। এই লেখার হিসাবে, গ্লোবাল ব্রাউজারের একটি 95.88% সমর্থন রয়েছে

আমি ওয়েব ক্রিপ্টো এপিআই ব্যবহার করে একটি উদাহরণ ভাগ করে যাচ্ছি

আমাদের এগিয়ে যাওয়ার আগে দয়া করে নোট করুন ( এমডিএন থেকে উদ্ধৃতি ):

এই এপিআই বেশ কয়েকটি নিম্ন স্তরের ক্রিপ্টোগ্রাফিক আদিমতা সরবরাহ করে। এটা তাদের অপব্যবহার করা খুব সহজ , এবং ফাঁদ জড়িত হতে পারে খুব সূক্ষ্ম

এমনকি আপনি ধরে নিচ্ছেন যে আপনি মৌলিক ক্রিপ্টোগ্রাফিক ফাংশনগুলি সঠিকভাবে ব্যবহার করছেন, সুরক্ষিত কী পরিচালনা এবং সামগ্রিক সুরক্ষা সিস্টেমের নকশা সঠিকভাবে পাওয়া খুব কঠিন এবং সাধারণত বিশেষজ্ঞ সুরক্ষা বিশেষজ্ঞের ডোমেন।

সুরক্ষা সিস্টেমের নকশা এবং প্রয়োগের ত্রুটিগুলি সিস্টেমের সুরক্ষাটিকে সম্পূর্ণ অকার্যকর করে তুলতে পারে।

আপনি যদি নিশ্চিত হন যে আপনি কী করছেন জানেন তবে আপনি সম্ভবত এই এপিআই ব্যবহার করবেন না

আমি সুরক্ষাকে অনেক সম্মান করি এবং আমি এমডিএন থেকে অতিরিক্ত অংশগুলিকেও সাহসী করে তুলেছিলাম ... আপনাকে এখনই সতর্ক করা হয়েছে

, আসল উদাহরণে ...


JSFiddle:

এখানে পাওয়া গেছে: https://jsfiddle.net/superjose/rm4e0gqa/5/

বিঃদ্রঃ:

awaitকীওয়ার্ড ব্যবহার নোট করুন । এটি কোনও asyncফাংশনের ভিতরে ব্যবহার করুন বা ব্যবহার করুন .then()এবং .catch()

কী তৈরি করুন:

// https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey
// https://developer.mozilla.org/en-US/docs/Web/API/RsaHashedKeyGenParams
// https://github.com/diafygi/webcrypto-examples#rsa-oaep---generatekey
    const stringToEncrypt = 'https://localhost:3001';
    // https://github.com/diafygi/webcrypto-examples#rsa-oaep---generatekey
    // The resultant publicKey will be used to encrypt
    // and the privateKey will be used to decrypt. 
    // Note: This will generate new keys each time, you must store both of them in order for 
    // you to keep encrypting and decrypting.
    //
    // I warn you that storing them in the localStorage may be a bad idea, and it gets out of the scope
    // of this post. 
    const key = await crypto.subtle.generateKey({
      name: 'RSA-OAEP',
      modulusLength: 4096,
      publicExponent:  new Uint8Array([0x01, 0x00, 0x01]),
      hash: {name: 'SHA-512'},
      
    }, true,
    // This depends a lot on the algorithm used
    // Go to https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto
    // and scroll down to see the table. Since we're using RSA-OAEP we have encrypt and decrypt available
    ['encrypt', 'decrypt']);

    // key will yield a key.publicKey and key.privateKey property.

এনক্রিপ্ট:

    const encryptedUri = await crypto.subtle.encrypt({
      name: 'RSA-OAEP'
    }, key.publicKey, stringToArrayBuffer(stringToEncrypt))
    
    console.log('The encrypted string is', encryptedUri);

ডিক্রিপ্ট

   const msg = await  crypto.subtle.decrypt({
      name: 'RSA-OAEP',
    }, key.privateKey, encryptedUri);
    console.log(`Derypted Uri is ${arrayBufferToString(msg)}`)

স্ট্রিং থেকে অ্যারেবফারকে পিছনে পিছনে রূপান্তর করা (টাইপস্ক্রিপ্টে সম্পন্ন):

  private arrayBufferToString(buff: ArrayBuffer) {
    return String.fromCharCode.apply(null, new Uint16Array(buff) as unknown as number[]);
  }

  private stringToArrayBuffer(str: string) {
    const buff = new ArrayBuffer(str.length*2) // Because there are 2 bytes for each char.
    const buffView = new Uint16Array(buff);
    for(let i = 0, strLen = str.length; i < strLen; i++) {
      buffView[i] = str.charCodeAt(i);
    }
    return buff;
  }

আপনি এখানে আরও উদাহরণ পেতে পারেন (আমি মালিক নই): // https://github.com/diafygi/webcrypto- উদাহরণ


2

ক্রিপ্টোজেএস আর সমর্থিত নয়। আপনি যদি এটির ব্যবহার চালিয়ে যেতে চান তবে আপনি এই url এ স্যুইচ করতে পারেন:

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>


3.1.2 ফোল্ডারের অধীনে রোলআপগুলি এবং উপাদানগুলির মধ্যে পার্থক্য কী?
কানাগাভেলু সুগুমার

1
ক্রিপ্টো সুপারিশ করা হয় ফোর্জ গ্রন্থাগার যখন আপনি তাদের সাইট লিখুন।
ড্রার বার

1

সিম্পলক্রিপ্টো ব্যবহার করুন

এনক্রিপ্ট () এবং ডিক্রিপ্ট () ব্যবহার করে

সিম্পলক্রিপ্টো ব্যবহার করতে প্রথমে একটি গোপন কী (পাসওয়ার্ড) দিয়ে একটি সিম্পলক্রিপ্টো উদাহরণ তৈরি করুন। সিম্প্রিক্রিপ্টো উদাহরণ তৈরি করার সময় গোপন কী পরামিতিগুলি অবশ্যই সংজ্ঞায়িত করা উচিত।

ডেটা এনক্রিপ্ট এবং ডিক্রিপ্ট করতে, কেবল উদাহরণ থেকে এনক্রিপ্ট () এবং ডিক্রিপ্ট () ফাংশনটি ব্যবহার করুন। এটি AES-CBC এনক্রিপশন অ্যালগরিদম ব্যবহার করবে।

var _secretKey = "some-unique-key";

var simpleCrypto = new SimpleCrypto(_secretKey);

var plainText = "Hello World!";
var chiperText = simpleCrypto.encrypt(plainText);
console.log("Encryption process...");
console.log("Plain Text    : " + plainText);
console.log("Cipher Text   : " + cipherText);
var decipherText = simpleCrypto.decrypt(cipherText);
console.log("... and then decryption...");
console.log("Decipher Text : " + decipherText);
console.log("... done.");

3
সিম্পলক্রিপ্টো অযৌক্তিক এইএস-সিবিসি ব্যবহার করে এবং তাই নির্বাচিত-সিফারেক্সট আক্রমণের ঝুঁকির মধ্যে রয়েছে।
স্কট আর্কিসজেউস্কি

-6

সাধারণ ফাংশন,


function Encrypt(value) 
{
  var result="";
  for(i=0;i<value.length;i++)
  {
    if(i<value.length-1)
    {
        result+=value.charCodeAt(i)+10;
        result+="-";
    }
    else
    {
        result+=value.charCodeAt(i)+10;
    }
  }
  return result;
}
function Decrypt(value)
{
  var result="";
  var array = value.split("-");

  for(i=0;i<array.length;i++)
  {
    result+=String.fromCharCode(array[i]-10);
  }
  return result;
} 

4
যদিও এই কোড স্নিপেট একটি সমাধান সহ সমাধান হতে পারে, সত্যিই আপনার পোস্টের গুণমান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না।
জোহান

1
এটি কোনও সুরক্ষিত অ্যালগরিদম নয় (নোট করুন যে এনক্রিপ্ট কোনও কী প্যারামিটার নিচ্ছে না) এবং সহজেই ইঞ্জিনিয়ার করা যায়। ওপিতে এমন কিছু সুরক্ষার জন্য জিজ্ঞাসা করা হয়েছিল।
মাইক এস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.