我正在使用以下代码加密和解密数据。
这是我的ENcoder callss
public class BASE64Encoder extends CharacterEncoder {
/** this class encodes three bytes per atom. */
protected int bytesPerAtom() {
return (3);
}
protected int bytesPerLine() {
return (57);
}
/** This array maps the characters to their 6 bit values */
private final static char pem_array[] = {
// 0 1 2 3 4 5 6 7
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 0
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 1
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 2
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', // 3
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', // 4
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', // 5
'w', 'x', 'y', 'z', '0', '1', '2', '3', // 6
'4', '5', '6', '7', '8', '9', '+', '/' // 7
};
protected void encodeAtom(OutputStream outStream, byte data[], int offset,
int len) throws IOException {
byte a, b, c;
if (len == 1) {
a = data[offset];
b = 0;
c = 0;
outStream.write(pem_array[(a >>> 2) & 0x3F]);
outStream.write(pem_array[((a << 4) & 0x30) + ((b >>> 4) & 0xf)]);
outStream.write('=');
outStream.write('=');
} else if (len == 2) {
a = data[offset];
b = data[offset + 1];
c = 0;
outStream.write(pem_array[(a >>> 2) & 0x3F]);
outStream.write(pem_array[((a << 4) & 0x30) + ((b >>> 4) & 0xf)]);
outStream.write(pem_array[((b << 2) & 0x3c) + ((c >>> 6) & 0x3)]);
outStream.write('=');
} else {
a = data[offset];
b = data[offset + 1];
c = data[offset + 2];
outStream.write(pem_array[(a >>> 2) & 0x3F]);
outStream.write(pem_array[((a << 4) & 0x30) + ((b >>> 4) & 0xf)]);
outStream.write(pem_array[((b << 2) & 0x3c) + ((c >>> 6) & 0x3)]);
outStream.write(pem_array[c & 0x3F]);
}
}
}
类用于解码器
public class DataEncryptor
{
static char[] carr = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
public static synchronized String encryptPassword(String input)
{
MessageDigest digest = null;
try
{
digest = MessageDigest.getInstance("MD5");
}
catch (Exception ex)
{
ex.printStackTrace();
}
if (digest == null)
return input;
try
{
digest.update(input.getBytes("UTF-8"));
}
catch (java.io.UnsupportedEncodingException ex)
{
ex.printStackTrace();
}
byte[] rawData = digest.digest();
BASE64Encoder bencoder = new BASE64Encoder();
return bencoder.encode(rawData);
}
}
这是我的活动,我想加密和解密我的数据
@Override
protected void onPostExecute(JSONObject json)
{
super.onPostExecute(json);
try
{
int randomNum = generateUniqueId();
RequestId =System.currentTimeMillis()+""+randomNum;
json.put(KEY_REQUEST_ID, RequestId);
json.put(KEY_REQUEST_CODE, RequestCode);
json.put(KEY_CHANNEL_ID, stringChannelId);
json.put(KEY_IP_ADDRESS, str_Device_IP_Address);
json.put(KEY_USERNAME, strUserName);
json.put(KEY_PASSWORD, strPassWord);
String jstr = json.toString();
System.out.println("jstr =" +jstr);
String reqvalues=AES128Bit.encrypt(json.toString(),key);
System.out.println("reqvalues =" +reqvalues);
JSONObject jSONObject = new JSONObject();
jSONObject.put(KEY_REQUEST, reqvalues);
jSONObject.put(KEY_VENDOR_ID, "1");
String jsonString = jSONObject.toString();
System.out.println("jsonString =" +jsonString);
JSONObject outer = new JSONObject();
outer.put("W2INBCWS", jsonString);
String outerJSONObjectResponse=outer.toString();
System.out.println("outerJSONObjectResponse =" +outerJSONObjectResponse);
// outerJSONObjectResponse=outerJSONObjectResponse.replace("true", "\"true\"");
// JSONObject dataJSONObject = new JSONObject(outerJSONObjectResponse);
// String strGetResponseFromJson=dataJSONObject.getString("Response");
String strGetResponseFromJson = AES128Bit.decrypt( outerJSONObjectResponse ,key);
System.out.println("strGetResponseFromJson =" +strGetResponseFromJson);
}
catch (JSONException e)
{
e.printStackTrace();
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
pDialog.dismiss();
}
}
当我运行应用程序时,我的应用程序崩溃并获得错误和异常。 这是我的Log Cat Stack Trace
12-09 12:46:14.705: E/dalvikvm(543): Could not find class 'sun.misc.BASE64Decoder', referenced from method com.anm.cms.core.util.AES128Bit.decrypt
12-09 12:46:14.705: W/dalvikvm(543): VFY: unable to resolve new-instance 1592 (Lsun/misc/BASE64Decoder;) in Lcom/anm/cms/core/util/AES128Bit;
12-09 12:46:14.705: D/dalvikvm(543): VFY: replacing opcode 0x22 at 0x000f
12-09 12:46:14.717: D/dalvikvm(543): VFY: dead code 0x0011-0021 in Lcom/anm/cms/core/util/AES128Bit;.decrypt (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
12-09 12:46:14.717: E/dalvikvm(543): Could not find class 'sun.misc.BASE64Encoder', referenced from method com.anm.cms.core.util.AES128Bit.encrypt
12-09 12:46:14.717: W/dalvikvm(543): VFY: unable to resolve new-instance 1593 (Lsun/misc/BASE64Encoder;) in Lcom/anm/cms/core/util/AES128Bit;
12-09 12:46:14.717: D/dalvikvm(543): VFY: replacing opcode 0x22 at 0x0017
12-09 12:46:14.725: D/dalvikvm(543): VFY: dead code 0x0019-001f in Lcom/anm/cms/core/util/AES128Bit;.encrypt (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
12-09 12:46:14.725: E/dalvikvm(543): Could not find class 'sun.misc.BASE64Decoder', referenced from method com.anm.cms.core.util.AES128Bit.generateKeyFromString
12-09 12:46:14.725: W/dalvikvm(543): VFY: unable to resolve new-instance 1592 (Lsun/misc/BASE64Decoder;) in Lcom/anm/cms/core/util/AES128Bit;
12-09 12:46:14.725: D/dalvikvm(543): VFY: replacing opcode 0x22 at 0x0000
12-09 12:46:14.725: D/dalvikvm(543): VFY: dead code 0x0002-0010 in Lcom/anm/cms/core/util/AES128Bit;.generateKeyFromString (Ljava/lang/String;)Ljava/security/Key;
12-09 12:46:14.735: E/dalvikvm(543): Could not find class 'sun.misc.BASE64Encoder', referenced from method com.anm.cms.core.util.AES128Bit.generateNewKey
12-09 12:46:14.735: W/dalvikvm(543): VFY: unable to resolve new-instance 1593 (Lsun/misc/BASE64Encoder;) in Lcom/anm/cms/core/util/AES128Bit;
12-09 12:46:14.735: D/dalvikvm(543): VFY: replacing opcode 0x22 at 0x0014
12-09 12:46:14.735: D/dalvikvm(543): VFY: dead code 0x0016-001c in Lcom/anm/cms/core/util/AES128Bit;.generateNewKey ()Ljava/lang/String;
12-09 12:46:14.735: D/AndroidRuntime(543): Shutting down VM
12-09 12:46:14.735: W/dalvikvm(543): threadid=1: thread exiting with uncaught exception (group=0x40015560)
12-09 12:46:14.755: E/AndroidRuntime(543): FATAL EXCEPTION: main
12-09 12:46:14.755: E/AndroidRuntime(543): java.lang.NoClassDefFoundError: sun.misc.BASE64Decoder
12-09 12:46:14.755: E/AndroidRuntime(543): at com.anm.cms.core.util.AES128Bit.generateKeyFromString(AES128Bit.java:58)
12-09 12:46:14.755: E/AndroidRuntime(543): at com.anm.cms.core.util.AES128Bit.encrypt(AES128Bit.java:21)
12-09 12:46:14.755: E/AndroidRuntime(543): at com.window2india.Login$GetJSONParse.onPostExecute(Login.java:208)
12-09 12:46:14.755: E/AndroidRuntime(543): at com.window2india.Login$GetJSONParse.onPostExecute(Login.java:1)
12-09 12:46:14.755: E/AndroidRuntime(543): at android.os.AsyncTask.finish(AsyncTask.java:417)
12-09 12:46:14.755: E/AndroidRuntime(543): at android.os.AsyncTask.access$300(AsyncTask.java:127)
12-09 12:46:14.755: E/AndroidRuntime(543): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
12-09 12:46:14.755: E/AndroidRuntime(543): at android.os.Handler.dispatchMessage(Handler.java:99)
12-09 12:46:14.755: E/AndroidRuntime(543): at android.os.Looper.loop(Looper.java:130)
12-09 12:46:14.755: E/AndroidRuntime(543): at android.app.ActivityThread.main(ActivityThread.java:3683)
12-09 12:46:14.755: E/AndroidRuntime(543): at java.lang.reflect.Method.invokeNative(Native Method)
12-09 12:46:14.755: E/AndroidRuntime(543): at java.lang.reflect.Method.invoke(Method.java:507)
12-09 12:46:14.755: E/AndroidRuntime(543): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-09 12:46:14.755: E/AndroidRuntime(543): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-09 12:46:14.755: E/AndroidRuntime(543): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
com.anm.cms.core.util.AES128Bit在类路径中不存在,我在你的代码中看到你正在使用它。
String reqvalues=AES128Bit.encrypt(json.toString(),key);
String strGetResponseFromJson = AES128Bit.decrypt( outerJSONObjectResponse ,key);
当我们在普通的java类中遇到这样的问题时,接下来建议遵循
找出它的.jar文件并将其放入类路径中。 假设您的jar文件名是ABC.jar和要在Main.java中运行的java文件 然后使用以下命令运行程序
java -cp C:\ ABC.jar Main
编辑: 我找到了特定于Android的question,它必须帮助你