私は、JavaScriptを使用してクライアント側で情報を暗号化および復号化する個人用の小さなアプリケーションを作成することに興味があります。暗号化された情報はサーバー上のデータベースに格納されますが、復号化されたバージョンは格納されません。
非常に安全である必要はありませんが、現在切れ目のないアルゴリズムを使用したいと思います。
理想的には、次のようなことができると思います。
var gibberish = encrypt(string, salt, key);
エンコードされた文字列を生成する
var sensical = decrypt(gibberish, key);
後でそれをデコードします。
これまでのところ私はこれを見ました: http://bitwiseshiftleft.github.io/sjcl/
私が見るべき他のライブラリはありますか?
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"></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>
CryptoJS はどうですか?
それは多くの機能を備えたしっかりした暗号ライブラリです。ハッシュ、HMAC、PBKDF2、および暗号を実装しています。この場合、暗号が必要です。プロジェクトのホームページでクイックスタートの成果をチェックしてください。
AESを使って、次のようなことができます。
<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>
セキュリティに関しては、私が書いている時点ではAESアルゴリズムは壊れていないと考えられています
編集:
オンラインURLがダウンしているようだ&あなたは与えられたリンクの下から暗号化のためにダウンロードしたファイルを使用することができます&アプリケーションのあなたのルートフォルダにそれぞれのファイルを配置します。
https://code.google.com/archive/p/crypto-js/downloads
または https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/aes-min.js のような他のCDNを使用しました==
私は簡単なテキスト暗号化/復号化utilを作成しました。外部ライブラリとの依存関係はありません。
これらは機能です
let cipher = salt => {
let textToChars = text => text.split('').map(c => c.charCodeAt(0))
let byteHex = n => ("0" + Number(n).toString(16)).substr(-2)
let applySaltToChar = code => textToChars(salt).reduce((a,b) => a ^ b, code)
return text => text.split('')
.map(textToChars)
.map(applySaltToChar)
.map(byteHex)
.join('')
}
let decipher = salt => {
let textToChars = text => text.split('').map(c => c.charCodeAt(0))
let saltChars = textToChars(salt)
let 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
let myCipher = cipher('mySecretSalt')
//Then cipher any text:
myCipher('the secret string') // --> "7c606d287b6d6b7a6d7c287b7c7a61666f"
//To decipher, you need to create a decipher and use it:
let myDecipher = decipher('mySecretSalt')
myDecipher("7c606d287b6d6b7a6d7c287b7c7a61666f") // --> 'the secret string'
最近のブラウザは現在、crypto.subtle
APIをサポートしています。これは、AES-CBC、AES-CTR、AES-GCM、またはRSA-OAEPのいずれかの方法を使用して、ネイティブの暗号化および復号化機能を提供します。
CryptoJSはサポートされなくなりました。使い続けたい場合は、次のURLに切り替えてください。
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
SimpleCrypto を使う
encrypt()およびdecrypt()を使用する
SimpleCryptoを使用するには、まず秘密鍵(パスワード)を指定してSimpleCryptoインスタンスを作成します。 SimpleCryptoインスタンスを作成するときに秘密鍵パラメータを定義しなければなりません。
データを暗号化および復号化するには、単にインスタンスからencrypt()およびdecrypt()関数を使用します。これは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.");
簡単な機能
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;
}