mirror of
https://github.com/apache/cordova-android.git
synced 2025-02-22 00:32:55 +08:00
Adding Built-In Crypto Library
This commit is contained in:
parent
c4ac7e5383
commit
cb90852dfc
37
framework/src/com/phonegap/CryptoHandler.java
Normal file
37
framework/src/com/phonegap/CryptoHandler.java
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
package com.phonegap;
|
||||||
|
|
||||||
|
import android.webkit.WebView;
|
||||||
|
|
||||||
|
public class CryptoHandler {
|
||||||
|
|
||||||
|
WebView mView;
|
||||||
|
|
||||||
|
CryptoHandler(WebView view)
|
||||||
|
{
|
||||||
|
mView = view;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void encrypt(String pass, String text)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
String encrypted = SimpleCrypto.encrypt(pass,text);
|
||||||
|
mView.loadUrl("javascript:Crypto.gotCryptedString('" + text + "')");
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void decrypt(String pass, String text)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
String decrypted = SimpleCrypto.decrypt(pass,text);
|
||||||
|
mView.loadUrl("javascript:Crypto.gotPlainString('" + text + "')");
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -60,8 +60,7 @@ public class DroidGap extends Activity {
|
|||||||
private NetworkManager netMan;
|
private NetworkManager netMan;
|
||||||
private CompassListener mCompass;
|
private CompassListener mCompass;
|
||||||
private Storage cupcakeStorage;
|
private Storage cupcakeStorage;
|
||||||
|
private CryptoHandler crypto;
|
||||||
|
|
||||||
|
|
||||||
/** Called when the activity is first created. */
|
/** Called when the activity is first created. */
|
||||||
@Override
|
@Override
|
||||||
@ -134,7 +133,8 @@ public class DroidGap extends Activity {
|
|||||||
mContacts = new ContactManager(this, appView);
|
mContacts = new ContactManager(this, appView);
|
||||||
fs = new FileUtils(appView);
|
fs = new FileUtils(appView);
|
||||||
netMan = new NetworkManager(this, appView);
|
netMan = new NetworkManager(this, appView);
|
||||||
mCompass = new CompassListener(this, appView);
|
mCompass = new CompassListener(this, appView);
|
||||||
|
crypto = new CryptoHandler(appView);
|
||||||
|
|
||||||
// This creates the new javascript interfaces for PhoneGap
|
// This creates the new javascript interfaces for PhoneGap
|
||||||
appView.addJavascriptInterface(gap, "DroidGap");
|
appView.addJavascriptInterface(gap, "DroidGap");
|
||||||
@ -145,6 +145,8 @@ public class DroidGap extends Activity {
|
|||||||
appView.addJavascriptInterface(fs, "FileUtil");
|
appView.addJavascriptInterface(fs, "FileUtil");
|
||||||
appView.addJavascriptInterface(netMan, "NetworkManager");
|
appView.addJavascriptInterface(netMan, "NetworkManager");
|
||||||
appView.addJavascriptInterface(mCompass, "CompassHook");
|
appView.addJavascriptInterface(mCompass, "CompassHook");
|
||||||
|
appView.addJavascriptInterface(crypto, "GapCrypto");
|
||||||
|
|
||||||
if (android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.DONUT)
|
if (android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.DONUT)
|
||||||
{
|
{
|
||||||
cupcakeStorage = new Storage(appView);
|
cupcakeStorage = new Storage(appView);
|
||||||
|
96
framework/src/com/phonegap/SimpleCrypto.java
Normal file
96
framework/src/com/phonegap/SimpleCrypto.java
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* Code originally found on Android Snippets
|
||||||
|
* Contributed to snippets Ferenc Hechler
|
||||||
|
* Copyright (c) 2009 Ferenc Hechler
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.phonegap;
|
||||||
|
|
||||||
|
import java.security.SecureRandom;
|
||||||
|
|
||||||
|
import javax.crypto.Cipher;
|
||||||
|
import javax.crypto.KeyGenerator;
|
||||||
|
import javax.crypto.SecretKey;
|
||||||
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
|
|
||||||
|
public class SimpleCrypto {
|
||||||
|
|
||||||
|
public static String encrypt(String seed, String cleartext) throws Exception {
|
||||||
|
byte[] rawKey = getRawKey(seed.getBytes());
|
||||||
|
byte[] result = encrypt(rawKey, cleartext.getBytes());
|
||||||
|
return toHex(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String decrypt(String seed, String encrypted) throws Exception {
|
||||||
|
byte [] rawKey = getRawKey(seed.getBytes());
|
||||||
|
byte [] enc = toByte(encrypted);
|
||||||
|
byte [] result = decrypt(rawKey, enc);
|
||||||
|
return new String(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static byte[] getRawKey(byte [] seed) throws Exception {
|
||||||
|
KeyGenerator kgen = KeyGenerator.getInstance("AES");
|
||||||
|
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
|
||||||
|
sr.setSeed(seed);
|
||||||
|
kgen.init(128, sr);
|
||||||
|
SecretKey skey = kgen.generateKey();
|
||||||
|
byte[] raw = skey.getEncoded();
|
||||||
|
return raw;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
|
||||||
|
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
|
||||||
|
Cipher cipher = Cipher.getInstance("AES");
|
||||||
|
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
|
||||||
|
byte[] encrypted = cipher.doFinal(clear);
|
||||||
|
return encrypted;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
|
||||||
|
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
|
||||||
|
Cipher cipher = Cipher.getInstance("AES");
|
||||||
|
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
|
||||||
|
byte[] decrypted = cipher.doFinal(encrypted);
|
||||||
|
return decrypted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String toHex(String txt)
|
||||||
|
{
|
||||||
|
return toHex(txt.getBytes());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String fromHex(String hex)
|
||||||
|
{
|
||||||
|
return new String(toByte(hex));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static byte[] toByte(String hexString) {
|
||||||
|
int len = hexString.length()/2;
|
||||||
|
byte[] result = new byte[len];
|
||||||
|
for (int i = 0; i < len; ++i)
|
||||||
|
{
|
||||||
|
result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String toHex(byte[] buf) {
|
||||||
|
if (buf == null)
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
StringBuffer result = new StringBuffer(2*buf.length);
|
||||||
|
for (int i = 0; i < buf.length; i++)
|
||||||
|
{
|
||||||
|
appendHex(result, buf[i]);
|
||||||
|
}
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private final static String HEX = "01234567890ABCDEF";
|
||||||
|
|
||||||
|
private static void appendHex(StringBuffer sb, byte b)
|
||||||
|
{
|
||||||
|
sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user