编码 JavaScript

Encoding in JavaScript

我在使用 Javascript 进行编程方面还很陌生,并且一直在对我的数据进行编码。

我已根据需要在我的 Android 应用程序中完成此操作,但无法在 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 客户提供任何参考或代码。

任何帮助将不胜感激。

感谢您对这个问题投反对票,这可能不是一个很好的问题,但在这里我自己做了

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