2016-08-29 31 views
-4

JavaScriptを使用したプログラミングでは非常に新しく、データのエンコーディングにも取り残されています。JavaScriptでのエンコーディング

私はAndroid Appの必要性に応じてこれを行っていますが、私のWebポータルのJavaScriptでこれを行うことはできませんでした。

私は、Androidアプリの中で使用しているコード:データを符号化コードの

public void encryptdata(byte[] data) { 
    Encrypter encrypter = new Encrypter(); 
    HashGenerator hashGenerator = new HashGenerator(); 
    try { 
     byte[] e = encrypter.generateSessionKey(); 
     byte[] encryptedData = encrypter.encryptUsingSessionKey(e, data); 
     byte[] hmac = hashGenerator.generateSha256Hash(data); 
     byte[] encryptedHmacBytes = encrypter.encryptUsingSessionKey(e, hmac); 
     this.encodedSessionKey = encodeBase64(e); 
     this.encodedHmac = encodeBase64(encryptedHmacBytes); 
     this.encodedData = encodeBase64(encryptedData); 
     } catch (Exception var6) { 
     var6.printStackTrace(); 
     throw new RuntimeException(var6); 
    } 
} 

Encrypter.java

class Encrypter { 
private static final String JCE_PROVIDER = "BC"; 
private static final int SYMMETRIC_KEY_SIZE = 256; 

Encrypter() { 
} 

public byte[] generateSessionKey() throws NoSuchAlgorithmException, NoSuchProviderException { 
    KeyGenerator kgen = KeyGenerator.getInstance("AES", "BC"); 
    kgen.init(256); 
    SecretKey key = kgen.generateKey(); 
    byte[] symmKey = key.getEncoded(); 
    return symmKey; 
} 

public byte[] encryptUsingSessionKey(byte[] skey, byte[] data) throws InvalidCipherTextException { 
    PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new AESEngine(), new PKCS7Padding()); 
    cipher.init(true, new KeyParameter(skey)); 
    int outputSize = cipher.getOutputSize(data.length); 
    byte[] tempOP = new byte[outputSize]; 
    int processLen = cipher.processBytes(data, 0, data.length, tempOP, 0); 
    int outputLen = cipher.doFinal(tempOP, processLen); 
    byte[] result = new byte[processLen + outputLen]; 
    System.arraycopy(tempOP, 0, result, 0, result.length); 
    return result; 
} 

static { 
    Security.addProvider(new BouncyCastleProvider()); 
} 
} 

HashGenerator.java

class HashGenerator { 
public HashGenerator() { 
} 

public byte[] generateSha256Hash(byte[] message) { 
    String var2 = "SHA-256"; 
    String var3 = "BC"; 
    byte[] var4 = null; 

    try { 
     MessageDigest var7 = MessageDigest.getInstance(var2, var3); 
     var7.reset(); 
     var4 = var7.digest(message); 
    } catch (Exception var6) { 
     var6.printStackTrace(); 
    } 

    return var4; 
} 
} 

これらのピースと私の必要に応じて私にHMACを与えてくれましたが、私はJavaScriptで同じことをすることができません。

誰でもJavaScriptクライアント用のリファレンスやコードを提供できます。

ご協力いただければ幸いです。ダウン投票の質問には

+0

だからあなたがいなくても基本、JavaScriptで何かをしようとしませんでしたか? [SubtleCrypto](https://developer.mozilla.org/en/docs/Web/API/SubtleCrypto)の –

+0

のドキュメント –

答えて

0

おかげで、素晴らしいではありません質問かもしれませんが、ここで私はそれを行って自分

this.doEncryption = function (data) { 
var key = btoa(this.generateRandomString()); 
var Encryptionkey = CryptoJS.enc.Base64.parse(key); 
var encryptedPid = CryptoJS.AES.encrypt(data,Encryptionkey,{ mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7}); 
var sha256 = CryptoJS.SHA256(data); 
var encryptedHmac = CryptoJS.AES.encrypt(sha256,Encryptionkey,{ mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7}); 
return { 
    encryptionKey : key, 
    encryptedPid : encryptedPid.toString(), 
    encryptedHmac : encryptedHmac.toString() 
}; 
関連する問題