2016-08-29 4 views
-4

Je suis très nouveau dans la programmation avec Javascript et coincé dans l'encodage de mes données.Encoder en JavaScript

Je l'ai fait selon les besoins dans mon application Android, mais je ne pouvais pas faire la même chose en JavaScript pour mon portail web.

Le code que je suis en utilisant dans Android App:

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

Ces morceau de code et le codage des données me donner HMAC selon mes besoins, mais je ne suis pas capable de faire pareil avec JavaScript.

Quelqu'un peut-il donner une référence ou un code pour le client JavaScript.

Toute aide sera appréciée.

+0

Vous n'avez pas essayé quoi que ce soit en javascript, pas même les bases? –

+0

documentation pour [SubtleCrypto] (https://developer.mozilla.org/en/docs/Web/API/SubtleCrypto) –

Répondre

0

Merci pour le bas droit de vote la question, peut-être pas une grande question, mais ici je fait moi-même

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