जावास्क्रिप्ट स्ट्रिंग एन्क्रिप्शन और डिक्रिप्शन?


152

मैं व्यक्तिगत उपयोग के लिए एक छोटा सा ऐप बनाने में दिलचस्पी रखता हूं जो जावास्क्रिप्ट का उपयोग करके क्लाइंट पक्ष पर जानकारी एन्क्रिप्ट और डिक्रिप्ट करेगा। एन्क्रिप्ट की गई जानकारी एक सर्वर पर एक डेटाबेस में संग्रहीत की जाएगी, लेकिन कभी भी डिक्रिप्टेड संस्करण नहीं।

यह सुपर डुपर सुरक्षित होने की जरूरत नहीं है, लेकिन मैं वर्तमान में अखंड एल्गोरिथ्म का उपयोग करना चाहूंगा।

आदर्श रूप से मैं ऐसा कुछ कर पाऊंगा

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

एन्कोडेड स्ट्रिंग उत्पन्न करने के लिए, और कुछ इस तरह

var sensical = decrypt(gibberish, key);

इसे बाद में डीकोड करना है।

अब तक मैंने इसे देखा है: http://bitwiseshiftleft.github.io/sjcl/

किसी भी अन्य पुस्तकालयों मैं देखना चाहिए?




10
यहाँ कुछ शब्दावली बंद है, यहाँ एक सरल संस्करण है 1. साल्ट को जानकारी (आमतौर पर पासवर्ड) में जोड़ा जाता है। उनका उद्देश्य नमक के बिना हैश को अलग बनाना है। यह उपयोगी है क्योंकि यह आपके डेटाबेस को हैक होने और हैश उपयोगकर्ता के पासवर्ड से बाहर निकलने पर हैश के पूर्व-निर्मित करता है। 2. हाशिंग एक तरह से ऑपरेशन है जो इनपुट को आउटपुट में तब्दील करता है। इसे आसानी से उलटा या पूर्ववत नहीं किया जा सकता है। 3. एन्कोडिंग एन्क्रिप्शन नहीं है। base64_encode, urlencode, इत्यादि
des

जवाबों:


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
एन्क्रिप्ट किया गया वास्तव में एक ऑब्जेक्ट है, लेकिन स्ट्रिंग प्राप्त करने के लिए आप एन्क्रिप्टेड.toString () कॉल कर सकते हैं। आप बाद में उस स्ट्रिंग को डिक्रिप्ट कर पाएंगे: jsbin.com/kofiqokoku/1
टॉमस किरदा

9
लेकिन हम गुप्त पासफ़्रेज़ को कैसे सुरक्षित कर सकते हैं?
11

9
ऐसा लगता है कि क्रिप्टो जेएस एक संग्रहीत परियोजना है। Github पर एक क्लोन है: github.com/sytelus/CryptoJS लेकिन इसे दो वर्षों में अपडेट नहीं किया गया है। यह अभी भी जे एस एन्क्रिप्शन के लिए सबसे अच्छा विकल्प है?
syonip

2
मैं इसके साथ जाऊंगा: github.com/brix/crypto-js यह NPM के माध्यम से भी उपलब्ध है
टॉमस किर्दा

1
@stom यह आपके ऊपर है कि आप इसे कैसे और कहां स्टोर करते हैं। मुझे नहीं पता कि ब्राउज़र में इसे स्टोर करने का कोई सही तरीका है या नहीं। उन्हें सर्वर से अनुरोध करें और मेमोरी में स्टोर करें।
टॉमस किर्दा

62

CryptoJS के बारे में कैसे ?

यह एक ठोस क्रिप्टो लाइब्रेरी है, जिसमें बहुत अधिक कार्यक्षमता है। यह हैशर्स, HMAC, PBKDF2 और सिपहर्स को लागू करता है। इस मामले में सिफर वही है जो आपको चाहिए। प्रोजेक्ट के होमपेज पर क्विक-स्टार्ट क्वाइड देखें।

आप एईएस के साथ कुछ कर सकते हैं:

<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>

सुरक्षा के लिए, मेरे लेखन के क्षण में एईएस एल्गोरिथ्म को अखंड माना जाता है

संपादित करें:

ऑनलाइन URL नीचे लगता है और आप नीचे दिए गए लिंक से एन्क्रिप्शन के लिए डाउनलोड की गई फ़ाइलों का उपयोग कर सकते हैं और संबंधित फाइलों को एप्लिकेशन के रूट फ़ोल्डर में रख सकते हैं।

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

या अन्य CDN का उपयोग किया https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/compenders/aes-min.js


फ़ोल्डर 3.1.2 के तहत रोलअप और घटकों के बीच क्या अंतर है?
कानागावेलु सुगुमार

थोड़ा खेलने के बाद घटक अलग किए गए भाग होते हैं। आपको यह जानना होगा कि इसे बनाने के लिए कौन से घटक (और किस क्रम में) लेने हैं। रोलअप फ़ाइलों में वह सब कुछ होता है जिसे आपको केवल एक स्क्रिप्ट संदर्भ के साथ काम करने की आवश्यकता होती है (बहुत बेहतर के रूप में कठिन काम पहले से ही किया जाता है)।
शाहर एल्लाद

2
लेकिन हम गुप्त पासफ़्रेज़ को कैसे सुरक्षित कर सकते हैं?
शैजुत

@ शशिजुत आप नहीं। प्लेनटेक्स्ट को एन्क्रिप्ट / डिक्रिप्ट करने पर आप रैम को छोड़कर कहीं भी इसे सेव नहीं करते हैं। पासफ़्रेज़ को केवल उपयोगकर्ता के मस्तिष्क (या पासवर्ड मैनेजर) में संग्रहीत किया जाना चाहिए
स्लीवेटमैन

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
आज्ञा देना myDecipher = डेसिफर ('कार्टेलसिस्टम') - यह नमक स्ट्रिंग को भी अच्छी तरह से समझेगा। आपको सटीक शब्द 'mySecretSalt' नहीं जानना है
Dror Bar

इसके अलावा, क्या नमक में नमक का उपयोग नहीं किया जा रहा है?
Dror Bar

1
फिर भी एक और पोस्ट जहां कोई आँख बंद करके इस्तेमाल कर रहा है let। 😒︎
जॉन

1
क्या यह a) सुपर टूटा हुआ और असुरक्षित नहीं है और b) 'नमक' वास्तव में आपकी 'गुप्त कुंजी' है क्योंकि लवण के निजी होने की उम्मीद नहीं है? मुझे लगता है कि इस तरह के कोड को किसी भी टिप्पणी के बिना पोस्ट करने के लिए बहुत खतरनाक है कि यह मजेदार कोड किसी भी वास्तविक दुनिया के उपयोग के लिए अभिप्रेत नहीं है। अपवित्रों की मात्रा चिंताजनक है। crypto.stackexchange.com/questions/11466/…
lschmierer

1
कम से कम वे ध्वनि क्रिप्टो का उपयोग करते हैं। आप जो कर रहे हैं, वह मूल रूप से एक सीज़र चीफ़र (हर किरदार के लिए एक ही कुंजी को लागू करना) en.wikipedia.org/wiki/Caesar_cipher#Breaking_the_cipher अन्य उत्तरों के बारे में है ... मुझे उम्मीद है कि यह स्पष्ट होगा कि कुछ "गुप्त" कहा जाता है। गुप्त रखने की उम्मीद (उपयोगकर्ता द्वारा)
lschmierer

18

मौजूदा जवाब जो SJCL, CryptoJS, और / या WebCrypto का लाभ उठाते हैं, जरूरी नहीं कि गलत हों, लेकिन वे उतने सुरक्षित नहीं हैं जितना कि आपको शुरू में संदेह हो सकता है। आम तौर पर आप लिबासोडियम का उपयोग करना चाहते हैं । पहले मैं समझाता हूँ क्यों, फिर कैसे।

SJCL, CryptoJS, WebCrypto, आदि क्यों नहीं?

संक्षिप्त उत्तर: आपके एन्क्रिप्शन को वास्तव में सुरक्षित रखने के लिए, ये लाइब्रेरी आपसे बहुत अधिक विकल्प बनाने की अपेक्षा करती है जैसे कि ब्लॉक सिफर मोड (CBC, CTR, GCM; का उपयोग करें और क्या सीमा के अन्दर, आप विकल्प की इस तरह के बोझ तले नहीं किया जाना चाहिए सब पर )।

जब तक आपकी नौकरी का शीर्षक क्रिप्टोग्राफी इंजीनियर नहीं है , तब तक आपके द्वारा इसे सुरक्षित रूप से लागू करने के खिलाफ बाधाओं का ढेर है।

CryptoJS से क्यों बचें?

CryptoJS मुट्ठी भर इमारत ब्लॉकों की पेशकश करता है और आपसे अपेक्षा करता है कि आप उन्हें सुरक्षित रूप से उपयोग करने का तरीका जानें। यह सीबीसी मोड ( संग्रहीत ) में भी चूक करता है

CBC मोड खराब क्यों है?

एईएस-सीबीसी कमजोरियों पर इस लेख को पढ़ें ।

WebCrypto से क्यों बचें?

WebCrypto एक पोट्लक मानक है, जिसे समिति द्वारा डिज़ाइन किया गया है, जो कि क्रिप्टोग्राफी इंजीनियरिंग के लिए ऑर्थोगोनल हैं। विशेष रूप से, WebCrypto फ्लैश को बदलने के लिए था, सुरक्षा प्रदान नहीं करता था

एसजेसीएल से क्यों बचें?

एसजेसीएल के सार्वजनिक एपीआई और प्रलेखन उपयोगकर्ताओं को मानव-याद पासवर्ड के साथ डेटा को एन्क्रिप्ट करने के लिए कहते हैं। यह शायद ही कभी होता है, यदि आप वास्तविक दुनिया में क्या करना चाहते हैं।

अतिरिक्त रूप से: इसका डिफ़ॉल्ट PBKDF2 राउंड काउंट लगभग 86 गुना छोटा है जितना आप चाहते हैं कि यह हो । एईएस -128-सीसीएम शायद ठीक है।

उपरोक्त तीन विकल्पों में से, एसजेसीएल आँसू में समाप्त होने की सबसे कम संभावना है। लेकिन बेहतर विकल्प उपलब्ध हैं।

लिबासोडियम बेहतर क्यों है?

आपको सिफर मोड, हैश फ़ंक्शंस और अन्य अनावश्यक विकल्पों के मेनू के बीच चयन करने की आवश्यकता नहीं है। आप अपने मापदंडों को खराब करने और अपने प्रोटोकॉल से सभी सुरक्षा को हटाने का जोखिम कभी नहीं लेंगे ।

इसके बजाय, लिबासोडियम आपको अधिकतम सुरक्षा और न्यूनतर एपीआई के लिए सरल विकल्प देता है।

  • crypto_box()/ crypto_box_open()प्रमाणित सार्वजनिक कुंजी एन्क्रिप्शन की पेशकश।
    • प्रश्न में एल्गोरिथ्म X25519 (कर्व 255 पर ECDH) और XSalsa20-Poly1305 को जोड़ती है, लेकिन आपको इसे सुरक्षित रूप से उपयोग करने के बारे में (या यहां तक ​​कि देखभाल) जानने की आवश्यकता नहीं है
  • crypto_secretbox()/ crypto_secretbox_open()साझा-कुंजी प्रमाणित एन्क्रिप्शन की पेशकश करें।
    • प्रश्न में एल्गोरिथ्म XSalsa20-Poly1305 है, लेकिन आपको जानने / देखभाल करने की आवश्यकता नहीं है

इसके अतिरिक्त, लिबासोडियम में दर्जनों लोकप्रिय प्रोग्रामिंग भाषाओं में बाइंडिंग है , इसलिए यह बहुत संभावना है कि लिबासोडियम सिर्फ तभी काम करेगा जब किसी अन्य प्रोग्रामिंग स्टैक के साथ हस्तक्षेप करने की कोशिश कर रहा हो। इसके अलावा, लिबासोडियम सुरक्षा का त्याग किए बिना बहुत तेज हो जाता है।

जावास्क्रिप्ट में लिबसोडियम का उपयोग कैसे करें?

सबसे पहले, आपको एक बात तय करने की आवश्यकता है:

  1. क्या आप डेटा को एन्क्रिप्ट / डिक्रिप्ट करना चाहते हैं (और शायद अभी भी किसी तरह डेटाबेस क्वेरी में प्लेटेक्स्ट का उपयोग सुरक्षित रूप से करते हैं) और विवरण के बारे में चिंता न करें? या ...
  2. क्या आपको किसी विशिष्ट प्रोटोकॉल को लागू करने की आवश्यकता है?

यदि आपने पहला विकल्प चुना है , तो CipherSweet.js प्राप्त करें

प्रलेखन ऑनलाइन उपलब्ध हैEncryptedFieldअधिकांश उपयोग के मामलों के लिए पर्याप्त है, लेकिन यदि आपके पास एन्क्रिप्ट करने के लिए बहुत सारे अलग-अलग फ़ील्ड हैं, तो एपीआई EncryptedRowऔर EncryptedMultiRowsएपीआई आसान हो सकते हैं।

सिफरस्वीट के साथ, आपको यह भी जानने की जरूरत नहीं है कि सुरक्षित रूप से इसका उपयोग करने के लिए एक गैर / IV क्या है

इसके अतिरिक्त, यह सिफरटेक्स्ट आकार के माध्यम से सामग्री के बारे में तथ्यों को लीक किए बिना int/ floatएन्क्रिप्शन को संभालता है ।

अन्यथा, आप सोडियम-प्लस चाहते हैं , जो विभिन्न लिबासोडी रैपरों के लिए एक उपयोगकर्ता के अनुकूल दृश्य है। सोडियम-प्लस आपको प्रदर्शनकर्ता, अतुल्यकालिक, क्रॉस-प्लेटफ़ॉर्म कोड लिखने की अनुमति देता है जो ऑडिट करना आसान है और इसके बारे में तर्क देता है।

सोडियम-प्लस स्थापित करने के लिए, बस चलाएं ...

npm install sodium-plus

वर्तमान में ब्राउज़र समर्थन के लिए कोई सार्वजनिक CDN नहीं है। यह जल्द ही बदल जाएगा। हालाँकि, आप हड़प सकते हैंsodium-plus.min.js नवीनतम Github रिलीज़ से यदि आपको इसकी आवश्यकता है।

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());
})();

सोडियम-प्लस का प्रलेखन जीथब पर उपलब्ध है।

यदि आप चरण-दर-चरण ट्यूटोरियल चाहते हैं, तो यह dev.to लेख है में वह है जो आप खोज रहे हैं।


16

आधुनिक ब्राउज़र अब समर्थन करते हैं crypto.subtle एपीआई का हैं, जो इन तरीकों में से एक का उपयोग करके देशी एन्क्रिप्शन और डिक्रिप्शन फ़ंक्शन (async no less!) प्रदान करता है: AES-CBC, AES-CTR, AES-GCM, या RSA-OAEP।

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


3
उपरोक्त विकल्पों में से, केवल AES-GCM और RSA-OAEP उचित हैं। :(
स्कॉट आर्किस्विस्की

4

इनमें से किसी को भी लागू करने से पहले, कृपया स्कॉट आर्किसेवस्की का जवाब देखें

मैं चाहता हूं कि आप बहुत सावधानी बरतें क्योंकि मैं साझा करने वाला हूं क्योंकि मुझे कोई सुरक्षा ज्ञान नहीं है (एक उच्च मौका है कि मैं नीचे एपीआई का दुरुपयोग कर रहा हूं), इसलिए मैं इस उत्तर को अपडेट करने के लिए स्वागत से अधिक हूं समुदाय की मदद से

जैसा कि @richardtallent ने अपने उत्तर में बताया है , इसमें वेब क्रिप्टो एपीआई का समर्थन है, इसलिए यह उदाहरण मानक का उपयोग करता है। इस लेखन के रूप में, वहाँ 95.88% वैश्विक ब्राउज़र समर्थन है

मैं वेब क्रिप्टो एपीआई का उपयोग करके एक उदाहरण साझा करने जा रहा हूं

आगे बढ़ने से पहले, कृपया ध्यान दें ( MDN से उद्धरण ):

यह एपीआई कई निम्न-स्तर की क्रिप्टोग्राफ़िक प्राइमेटिविटी प्रदान करता है। यह उन्हें दुरुपयोग करने का बहुत ही आसान है, और नुकसान शामिल हो सकता है बहुत ही सूक्ष्म

यहां तक ​​कि यह मानते हुए कि आप बुनियादी क्रिप्टोग्राफ़िक कार्यों का सही उपयोग करते हैं, सुरक्षित कुंजी प्रबंधन और समग्र सुरक्षा प्रणाली का डिज़ाइन सही पाने के लिए बेहद कठिन है और आम तौर पर विशेषज्ञ सुरक्षा विशेषज्ञों का डोमेन है।

सुरक्षा प्रणाली के डिजाइन और कार्यान्वयन में त्रुटियां सिस्टम की सुरक्षा को पूरी तरह से अप्रभावी बना सकती हैं।

यदि आप सुनिश्चित नहीं हैं कि आप जानते हैं कि आप क्या कर रहे हैं, तो आपको शायद इस एपीआई का उपयोग नहीं करना चाहिए

मैं सुरक्षा का बहुत सम्मान करता हूं, और मैंने एमडीएन से अतिरिक्त हिस्सों को भी बोल्ड किया है ... आपको

वास्तविक उदाहरण के लिए अब चेतावनी दी गई है ...


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)}`)

स्ट्रिंग से आगे और पीछे ArrayBuffer परिवर्तित करना (टाइपस्क्रिप्ट में किया गया):

  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-examples


2

CryptoJS अब समर्थित नहीं है। यदि आप इसका उपयोग जारी रखना चाहते हैं, तो आप इस url पर स्विच कर सकते हैं:

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


फ़ोल्डर 3.1.2 के तहत रोलअप और घटकों के बीच क्या अंतर है?
काणागावेलु सुगुमार

1
जब आप उनकी साइट में प्रवेश करते हैं, तो क्रिप्टो फ़ोरज़ लाइब्रेरी की सिफारिश कर रहा है ।
ड्रोर बार

1

SimpleCrypto का उपयोग करें

एन्क्रिप्शन () और डिक्रिप्ट () का उपयोग करना

SimpleCrypto का उपयोग करने के लिए, पहले एक Simple कुंजी (पासवर्ड) के साथ एक SimpleCrypto उदाहरण बनाएं। SimpleCrypto उदाहरण बनाते समय गुप्त कुंजी पैरामीटर को परिभाषित किया जाना चाहिए।

एन्क्रिप्ट और डिक्रिप्ट डेटा के लिए, उदाहरण के लिए, एनक्रिप्ट () और डिक्रिप्ट () फ़ंक्शन का उपयोग करें। यह एईएस-सीबीसी एन्क्रिप्शन एल्गोरिथ्म का उपयोग करेगा।

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
SimpleCrypto बेवजह AES-CBC का उपयोग करता है और इसलिए चुने हुए सिफरटेक्स्ट हमलों के लिए असुरक्षित है।
स्कॉट आर्किसेवस्की

-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
यह एक सुरक्षित एल्गोरिथ्म नहीं है (ध्यान दें कि एन्क्रिप्ट एक प्रमुख पैरामीटर नहीं ले रहा है) और आसानी से उलट हो सकता है इंजीनियर। ओपी ने उस चीज के लिए कहा जिस पर सुरक्षा थी।
माइक एस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.