2016-08-29 4 views
-4

나는 자바 스크립트로 프로그래밍 할 때 매우 새롭고 데이터 인코딩에 박혀있다.자바 스크립트로 인코딩하기

필자는 Android 앱의 필요에 따라이 작업을 수행했지만 내 웹 포털의 경우 JavaScript에서 동일한 작업을 수행 할 수 없었습니다.

나는 안드로이드 응용 프로그램에서 사용하고 코드 : 데이터를 인코딩 코드의

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를 제공하지만 자바 스크립트로 동일한 작업을 수행 할 수는 없습니다.

누구든지 자바 스크립트 클라이언트에 대한 참조 또는 코드를 제공 할 수 있습니까?

도움이 될 것입니다.

+0

그래서 당신은, 심지어 기초를 자바 스크립트에서 아무것도 시도하지 않았다 그것을 자신을 수행? [SubtleCrypto]에 대한 –

+0

문서 (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() 
}; 
관련 문제