2016-08-29 3 views
-4

Я очень новичок в программировании с Javascript и застреваю в кодировании своих данных.Кодировка в JavaScript

Я сделал это по мере необходимости в своем приложении для Android, но не смог сделать то же самое в JavaScript для своего веб-портала.

код, который я использую в 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; 
} 
} 

Эти кусок кода кодирования данных и давая мне HMAC по моей потребности, но я не могу сделать то же самое с JavaScript.

Может ли кто-нибудь дать ссылку или код для клиента JavaScript.

Любая помощь будет оценена по достоинству.

+0

Таким образом, вы не пытались что-либо в JavaScript, даже не основы? –

+0

для [SubtleCrypto] (https://developer.mozilla.org/en/docs/Web/API/SubtleCrypto) –

ответ

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() 
}; 
Смежные вопросы