2017-08-23 14 views
1

クライアント側で初期化ベクトルとキーを使用して復号化しようとしていますが、GWTはそれを認識できません。初期化ベクトルを使用して暗号化と復号化をより安全にする方法を教えてください。サーバー側で初期化ベクトルはgwtでサポートされていません

私は暗号化することができる午前なく、クライアント側で私は解読できないです.. するKeyGeneratorとIvParameterSpecはGWT

private String encryptDES(String sessionKey) throws Exception { 
    KeyGenerator keygenerator = KeyGenerator.getInstance("DESede"); 
    SecretKey myKey = keygenerator.generateKey(); 
    SecureRandom sr = new SecureRandom(); 
    byte [] iv = new byte[8]; 
    sr.nextBytes(iv); 
    IvParameterSpec IV = new IvParameterSpec(iv); 
    Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); 
    cipher.init(Cipher.ENCRYPT_MODE, myKey, IV); 
    String encrypted = Base64.encode(cipher.doFinal(sessionKey.getBytes())); 
    return encrypted; 
} 

でサポートされていないが、私はそれを

答えて

3

書き込みを解決する助けてください暗号の周りのラッパー 100行未満のコードでなければなりません。例えば

を注入はcrypto.js

String url = GWT.getModuleBaseForStaticFiles() + "js/aes.js"; 
ScriptInjector.fromUrl(url).setWindow(ScriptInjector.TOP_WINDOW).inject(); 

暗号化

/** 
* Encrypt the given String with the given key. 
* 
* @param s The String to encrypt 
* @param cipher The cipher 
* @return The encrypted String 
*/ 
public static native String encrypt(String s, String cipher) 
/*-{ 
    var key = $wnd.CryptoJS.enc.Utf8.parse(cipher); 
    var iv = $wnd.CryptoJS.enc.Utf8.parse(cipher); 

    var encrypted = $wnd.CryptoJS.AES.encrypt($wnd.CryptoJS.enc.Utf8.parse(s), key, 
    { 
     keySize: 128/8, 
     iv: iv, 
     mode: $wnd.CryptoJS.mode.CBC, 
     padding: $wnd.CryptoJS.pad.Pkcs7 
    }); 

    return encrypted; 
}-*/; 

復号化

/** 
* Decrypt the given String with the given key. 
* 
* @param s The String to decrypt 
* @param cipher The key 
* @return The decrypted String 
*/ 
public static native String decrypt(String s, String cipher) 
/*-{ 
    var key = $wnd.CryptoJS.enc.Utf8.parse(cipher); 
    var iv = $wnd.CryptoJS.enc.Utf8.parse(cipher); 

    var decrypted = $wnd.CryptoJS.AES.decrypt(s, key, 
    { 
     keySize: 128/8, 
     iv: iv, 
     mode: $wnd.CryptoJS.mode.CBC, 
     padding: $wnd.CryptoJS.pad.Pkcs7 
    }); 

    return decrypted.toString($wnd.CryptoJS.enc.Utf8); 
}-*/; 
+0

からAES私はJSNIを使用してみましたが、働いていたdidntの..私はすでにトリプルDESの実装を持っていますが、ハードコードされたキーの値と..今私は、ランダムに生成される必要がありますので、より安全に鍵をしたい..私はいくつかのapprochが疲れている私はインターネットでGWTをサポートしているランダムにキーを生成するための解決策を見つけることができませんでした。 –

関連する問題