Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android NoClassDefFoundError-RSA加密_Java_Android_Encryption_Rsa_Noclassdeffounderror - Fatal编程技术网

Java Android NoClassDefFoundError-RSA加密

Java Android NoClassDefFoundError-RSA加密,java,android,encryption,rsa,noclassdeffounderror,Java,Android,Encryption,Rsa,Noclassdeffounderror,我正在做一个概念项目 我有一个服务器和客户端,它们都是用Kryonet TCP/UDP库实现的。它在我的计算机上与纯Java一样工作良好,但是当我尝试在Android上执行一些代码时,它给出了以下结果 LogCat输出: 07-18 15:35:40.718: E/AndroidRuntime(19229): FATAL EXCEPTION: main 07-18 15:35:40.718: E/AndroidRuntime(19229): Process: com.example.kryoan

我正在做一个概念项目

我有一个服务器和客户端,它们都是用Kryonet TCP/UDP库实现的。它在我的计算机上与纯Java一样工作良好,但是当我尝试在Android上执行一些代码时,它给出了以下结果

LogCat输出:

07-18 15:35:40.718: E/AndroidRuntime(19229): FATAL EXCEPTION: main
07-18 15:35:40.718: E/AndroidRuntime(19229): Process: com.example.kryoandrochat, PID: 19229
07-18 15:35:40.718: E/AndroidRuntime(19229): java.lang.NoClassDefFoundError: sun.security.rsa.RSAPublicKeyImpl
07-18 15:35:40.718: E/AndroidRuntime(19229):    at com.example.kryoandrochat.MainActivity.onClick(MainActivity.java:133)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at android.view.View.performClick(View.java:4626)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at android.view.View$PerformClick.run(View.java:19300)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at android.os.Handler.handleCallback(Handler.java:733)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at android.os.Handler.dispatchMessage(Handler.java:95)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at android.os.Looper.loop(Looper.java:157)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at android.app.ActivityThread.main(ActivityThread.java:5293)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at java.lang.reflect.Method.invokeNative(Native Method)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at java.lang.reflect.Method.invoke(Method.java:515)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at dalvik.system.NativeStart.main(Native Method)
package com.example.kryoandrochat;

import java.io.IOException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;

import sun.security.rsa.RSAPublicKeyImpl;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.esotericsoftware.kryonet.Client;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;

public class MainActivity extends Activity implements OnClickListener{

    private Client client;
    private TextView tv;
    private EditText et;
    private Button send;
    private PublicKey publicKey, targetsPublicKey;
    private String targetUserName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.chatTextView);
        et = (EditText) findViewById(R.id.chatField);
        send = (Button) findViewById(R.id.send);
        send.setOnClickListener(this);

        client = new Client();
        new NetworkTask().execute("");

        client.addListener(new Listener(){

            public void received (Connection connection, Object object) {

                if(object instanceof ClientConnectedPacket){
                    ClientConnectedPacket ccp = (ClientConnectedPacket) object;
                    tv.setText(ccp.userName + " is online now. \n");
                    PublicKeyPacket pkp = new PublicKeyPacket();
                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.append(((RSAPublicKeyImpl) publicKey).getModulus().toString());
                    stringBuilder.append("|");
                    stringBuilder.append(((RSAPublicKeyImpl) publicKey).getPublicExponent().toString());
                    String serPK = stringBuilder.toString();
                    pkp.publicKey = serPK;
                    pkp.targetUserName = targetUserName;
                    client.sendTCP(pkp);

                } 
            }
        });     

    }

    private class NetworkTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
            try {

                client.connect(10000, "myHostIP", 27960, 8008);

                new Thread(client).start();

            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("Baglanamadik.");
            }   

            new Thread(client).start();

            return "Connected";
        }

        @Override
        protected void onPostExecute(String result) {

            tv.setText("We are connected");
        }

        @Override
        protected void onPreExecute() {

            client.getKryo().register(ChatPacket.class);
            client.getKryo().register(ClientConnectedPacket.class);
            client.getKryo().register(UserConnectedPacket.class);
            client.getKryo().register(UserDisconnectedPacket.class);    
            client.getKryo().register(KeyPairGenerator.class);
            client.getKryo().register(KeyPair.class);
            client.getKryo().register(PublicKey.class);
            client.getKryo().register(PrivateKey.class);
            client.getKryo().register(PublicKeyPacket.class);
            //client.getKryo().register(sun.security.rsa.RSAPublicKeyImpl.class);
            //client.getKryo().register(sun.security.x509.AlgorithmId.class);
            //client.getKryo().register(sun.security.util.ObjectIdentifier.class);
            client.getKryo().register(byte[].class);
            client.getKryo().register(java.math.BigInteger.class);


        }

        @Override
        protected void onProgressUpdate(Void... values) {}
    }

    @Override
    public void onClick(View v) {

        if (v == send){

            String temp = "";
            temp = et.getText().toString();
            if (!temp.equals("")){

                ChatPacket c = new ChatPacket();
                c.userName = "user3";
                c.targetUserName = targetUserName;

                PublicKeyPacket pkp = new PublicKeyPacket();
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.append(((RSAPublicKeyImpl) publicKey).getModulus().toString());
                stringBuilder.append("|");
                stringBuilder.append(((RSAPublicKeyImpl) publicKey).getPublicExponent().toString());
                String serPK = stringBuilder.toString();
                pkp.publicKey = serPK;
                pkp.userName = "user3";
                pkp.targetUserName = targetUserName;
                client.sendTCP(pkp);

                /*try {
                    c.message = encryptData(temp);
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }*/
                client.sendTCP(c);
            }

        }

    }
}
我在我的项目中包括了JRE系统库,但没有任何变化

以下是客户端代码:

07-18 15:35:40.718: E/AndroidRuntime(19229): FATAL EXCEPTION: main
07-18 15:35:40.718: E/AndroidRuntime(19229): Process: com.example.kryoandrochat, PID: 19229
07-18 15:35:40.718: E/AndroidRuntime(19229): java.lang.NoClassDefFoundError: sun.security.rsa.RSAPublicKeyImpl
07-18 15:35:40.718: E/AndroidRuntime(19229):    at com.example.kryoandrochat.MainActivity.onClick(MainActivity.java:133)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at android.view.View.performClick(View.java:4626)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at android.view.View$PerformClick.run(View.java:19300)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at android.os.Handler.handleCallback(Handler.java:733)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at android.os.Handler.dispatchMessage(Handler.java:95)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at android.os.Looper.loop(Looper.java:157)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at android.app.ActivityThread.main(ActivityThread.java:5293)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at java.lang.reflect.Method.invokeNative(Native Method)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at java.lang.reflect.Method.invoke(Method.java:515)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
07-18 15:35:40.718: E/AndroidRuntime(19229):    at dalvik.system.NativeStart.main(Native Method)
package com.example.kryoandrochat;

import java.io.IOException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;

import sun.security.rsa.RSAPublicKeyImpl;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.esotericsoftware.kryonet.Client;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;

public class MainActivity extends Activity implements OnClickListener{

    private Client client;
    private TextView tv;
    private EditText et;
    private Button send;
    private PublicKey publicKey, targetsPublicKey;
    private String targetUserName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.chatTextView);
        et = (EditText) findViewById(R.id.chatField);
        send = (Button) findViewById(R.id.send);
        send.setOnClickListener(this);

        client = new Client();
        new NetworkTask().execute("");

        client.addListener(new Listener(){

            public void received (Connection connection, Object object) {

                if(object instanceof ClientConnectedPacket){
                    ClientConnectedPacket ccp = (ClientConnectedPacket) object;
                    tv.setText(ccp.userName + " is online now. \n");
                    PublicKeyPacket pkp = new PublicKeyPacket();
                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.append(((RSAPublicKeyImpl) publicKey).getModulus().toString());
                    stringBuilder.append("|");
                    stringBuilder.append(((RSAPublicKeyImpl) publicKey).getPublicExponent().toString());
                    String serPK = stringBuilder.toString();
                    pkp.publicKey = serPK;
                    pkp.targetUserName = targetUserName;
                    client.sendTCP(pkp);

                } 
            }
        });     

    }

    private class NetworkTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
            try {

                client.connect(10000, "myHostIP", 27960, 8008);

                new Thread(client).start();

            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("Baglanamadik.");
            }   

            new Thread(client).start();

            return "Connected";
        }

        @Override
        protected void onPostExecute(String result) {

            tv.setText("We are connected");
        }

        @Override
        protected void onPreExecute() {

            client.getKryo().register(ChatPacket.class);
            client.getKryo().register(ClientConnectedPacket.class);
            client.getKryo().register(UserConnectedPacket.class);
            client.getKryo().register(UserDisconnectedPacket.class);    
            client.getKryo().register(KeyPairGenerator.class);
            client.getKryo().register(KeyPair.class);
            client.getKryo().register(PublicKey.class);
            client.getKryo().register(PrivateKey.class);
            client.getKryo().register(PublicKeyPacket.class);
            //client.getKryo().register(sun.security.rsa.RSAPublicKeyImpl.class);
            //client.getKryo().register(sun.security.x509.AlgorithmId.class);
            //client.getKryo().register(sun.security.util.ObjectIdentifier.class);
            client.getKryo().register(byte[].class);
            client.getKryo().register(java.math.BigInteger.class);


        }

        @Override
        protected void onProgressUpdate(Void... values) {}
    }

    @Override
    public void onClick(View v) {

        if (v == send){

            String temp = "";
            temp = et.getText().toString();
            if (!temp.equals("")){

                ChatPacket c = new ChatPacket();
                c.userName = "user3";
                c.targetUserName = targetUserName;

                PublicKeyPacket pkp = new PublicKeyPacket();
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.append(((RSAPublicKeyImpl) publicKey).getModulus().toString());
                stringBuilder.append("|");
                stringBuilder.append(((RSAPublicKeyImpl) publicKey).getPublicExponent().toString());
                String serPK = stringBuilder.toString();
                pkp.publicKey = serPK;
                pkp.userName = "user3";
                pkp.targetUserName = targetUserName;
                client.sendTCP(pkp);

                /*try {
                    c.message = encryptData(temp);
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }*/
                client.sendTCP(c);
            }

        }

    }
}
package com.example.kryoandrochat;
导入java.io.IOException;
导入java.security.KeyPair;
导入java.security.KeyPairGenerator;
导入java.security.PrivateKey;
导入java.security.PublicKey;
导入sun.security.rsa.RSAPublicKeyImpl;
导入android.app.Activity;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.TextView;
导入com.esotericsoftware.kryonet.Client;
导入com.esotericsoftware.kryonet.Connection;
导入com.esotericsoftware.kryonet.Listener;
公共类MainActivity扩展活动实现OnClickListener{
私人客户;
私家图文电视;
私人编辑;
私人按钮发送;
私钥公钥,targetsPublicKey;
私有字符串targetUserName;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.chatTextView);
et=(EditText)findViewById(R.id.chatField);
send=(按钮)findviewbyd(R.id.send);
send.setOnClickListener(this);
client=新客户端();
新建NetworkTask()。执行(“”);
client.addListener(新侦听器(){
接收到公共void(连接、对象){
if(ClientConnectedPacket的对象实例){
ClientConnectedPacket ccp=(ClientConnectedPacket)对象;
tv.setText(ccp.userName+“现在联机。\n”);
PublicKeyPacket pkp=新的PublicKeyPacket();
StringBuilder StringBuilder=新的StringBuilder();
追加((RSAPublicKeyImpl)publicKey.getmodule().toString());
stringBuilder.append(“|”);
追加((RSAPublicKeyImpl)publicKey.getPublicExponent().toString());
字符串serPK=stringBuilder.toString();
pkp.publicKey=serPK;
pkp.targetUserName=targetUserName;
client.sendTCP(pkp);
} 
}
});     
}
私有类NetworkTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
client.connect(10000,“myHostIP”,279608008);
新线程(client.start();
}捕获(IOE异常){
e、 printStackTrace();
System.out.println(“Baglanamadik”);
}   
新线程(client.start();
返回“已连接”;
}
@凌驾
受保护的void onPostExecute(字符串结果){
tv.setText(“我们已连接”);
}
@凌驾
受保护的void onPreExecute(){
client.getKryo().register(chatpack.class);
client.getKryo().register(ClientConnectedPacket.class);
client.getKryo().register(UserConnectedPacket.class);
client.getKryo().register(UserDisconnectedPacket.class);
client.getKryo().register(KeyPairGenerator.class);
client.getKryo().register(KeyPair.class);
client.getKryo().register(PublicKey.class);
client.getKryo().register(PrivateKey.class);
client.getKryo().register(PublicKeyPacket.class);
//client.getKryo().register(sun.security.rsa.RSAPublicKeyImpl.class);
//client.getKryo().register(sun.security.x509.AlgorithmId.class);
//client.getKryo().register(sun.security.util.ObjectIdentifier.class);
client.getKryo().register(字节[].class);
client.getKryo().register(java.math.biginger.class);
}
@凌驾
受保护的void onProgressUpdate(void…值){}
}
@凌驾
公共void onClick(视图v){
如果(v==发送){
字符串temp=“”;
temp=et.getText().toString();
如果(!temp.equals(“”){
chatpack c=新chatpack();
c、 userName=“user3”;
c、 targetUserName=targetUserName;
PublicKeyPacket pkp=新的PublicKeyPacket();
StringBuilder StringBuilder=新的StringBuilder();
追加((RSAPublicKeyImpl)publicKey.getmodule().toString());
stringBuilder.append(“|”);
追加((RSAPublicKeyImpl)publicKey.getPublicExponent().toString());
字符串serPK=stringBuilder.toString();
pkp.publicKey=serPK;
pkp.userName=“user3”;
pkp.targetUserName=targetUserName;
client.sendTCP(pkp);
/*试一试{
c、 消息=加密数据(临时);
}捕获(IOE1异常){
//TODO自动生成的捕捉块
e1.printStackTrace();
}*/
client.sendTCP(c);
}
}
}
}

右键单击项目,选择生成路径>配置生成路径,选中库的选项。

导入sun.security.rsa.RSAPublicKeyImpl

这显然是荒谬的。Android上没有这样的类;这意味着你不能使用它。Oracle(以前的Sun)Jav中可能有这样一个类