Php android中的RSA产生正确的密钥但解密错误

Php android中的RSA产生正确的密钥但解密错误,php,android,mysql,encryption,rsa,Php,Android,Mysql,Encryption,Rsa,我正在尝试使用PHP和Android加密MySQL数据库中的用户名和密码数据。我将数据作为一个BLOB类型保存在MySQL数据库中,并将公钥保存在数据库中。 注意:使用HTTP以JSON格式检索和提交done 但是:尽管使用Base64编码检索数据,但在解密后,我得到了错误的数据(,在下面的日志中很容易看到)(sid,a)用于(用户名,密码)并且(YzJsawo=,YzJsawo=)已获得)(我已经用CHAR和VARCHAR尝试过,但没有成功) 请帮忙我明天就要提交项目了。担心如果你认为你不能阅

我正在尝试使用PHP和Android加密MySQL数据库中的用户名和密码数据。我将数据作为一个BLOB类型保存在MySQL数据库中,并将公钥保存在数据库中。 注意:使用HTTP以JSON格式检索和提交done

但是:尽管使用Base64编码检索数据,但在解密后,我得到了错误的数据(,在下面的日志中很容易看到)(sid,a)用于(用户名,密码)并且(YzJsawo=,YzJsawo=)已获得)(我已经用CHAR和VARCHAR尝试过,但没有成功)

请帮忙我明天就要提交项目了。担心如果你认为你不能阅读我写的代码,请为我提供一个解决上述问题的替代方案,或者提供一个讨论类似问题的链接(尽管我找不到)

这就是我要做的

加密部分

受保护的字符串doInBackground(字符串…args){
runOnUiThread(新的Runnable(){
公开募捐{
userStr=inputUsername.getText().toString();
passStr=inputPassword.getText().toString();
confirmpass=inputConfirmPass.getText().toString();
if(userStr.equals(“”)| passStr.equals(“”)| confirmpass.equals(“”)
{
Toast.makeText(getApplicationContext(),“输入所有字段”,Toast.LENGTH\u SHORT.show();
}
其他的
{
if(passStr.equals(confirmpass))
{
//使用RSA算法对字符串进行编码
//原文
有效=1;
//为1024位RSA加密和解密生成密钥对
Key publicKey=null;
密钥privateKey=null;
字符串publicKeyStr;
试一试{
KeyPairGenerator kpg=KeyPairGenerator.getInstance(“RSA”);
初始化(1024);
KeyPair kp=kpg.genKeyPair();
publicKey=kp.getPublic();
privateKey=kp.getPrivate();
}捕获(例外e){
Log.e(“,“RSA密钥对错误”);
}
字节[]encodedUser=null,encodedPassword=null;
//将公钥更改为str以在活动之间传输
publicKeyStr=Base64.encodeToString(publicKey.getEncoded(),Base64.DEFAULT);
试一试{
//编码用户名
//使用RSA私钥对原始数据进行编码
Cipher c=Cipher.getInstance(“RSA/ECB/PKCS1Padding”);
c、 init(Cipher.ENCRYPT_模式,privateKey);
encodedUser=c.doFinal(Base64.encode(userStr.getBytes(“utf-8”),Base64.DEFAULT));
//编码密码
encodedPassword=c.doFinal(Base64.encode(passStr.getBytes(“utf-8”),Base64.DEFAULT));
}捕获(例外e){
Log.e(“错误类型:”,“RSA加密错误”);
}
字符串UsernameStrEncod,passwordcod;
UsernameStrEncod=Base64.encodeToString(encodedUser,Base64.DEFAULT);
PasswordStrEncod=Base64.encodeToString(encodedPassword,Base64.DEFAULT);
List params=new ArrayList();
添加(新的BasicNameValuePair(“用户名”,UsernameStrEncod));
参数add(新的BasicNameValuePair(“密码”,PasswordStrEncod));
参数add(新的BasicNameValuePair(“publickey”,publicKeyStr));
//获取JSON对象
//请注意,创建产品url接受POST方法
JSONObject json=jsonParser.makeHttpRequest(url\u register\u user,“POST”,params);
//检查cat fro响应日志
d(“创建响应”,json.toString());
//检查成功标签
试一试{
int success=json.getInt(TAG_success);
如果(成功==1){
//已成功创建产品
Intent i=新Intent(getApplicationContext(),LoginActivity.class);
//i、 putExtra(“编码器”,编码器);
//i、 putExtra(“公钥”,publicKeyStr);
星触觉(i);
//关闭此屏幕
完成();
}否则{
//未能创建产品
}
}捕获(JSONException e){
e、 printStackTrace();
}
}
其他的
Toast.makeText(getApplicationContext(),“两个密码都不匹配”,Toast.LENGTH\u SHORT.show();
}
}
});	
返回null;
}
看看这个

          <?php
             $hashedpassword = crypt("james");

             /*echo $hashedpassword;
            */
           if (password_verify('james', $hashedpassword)) {
              echo 'Password is valid!';
           } else {
              echo 'Invalid password.';
           }
        ?>


为了让事情变得简单…..在保存它之前先在php上加密密码,我不知道该怎么做@JamesNjuguna。请为我提供一个相同的链接。为了方便您…在保存密码之前在php上加密密码…使用cypt函数示例。。它将为您提供$1$LQRPfo2N$A35m/IDPCOP0Y4FHNXLF的输出。我给您的代码允许您加密密码,您可以在登录时使用if控件结构上的代码检查密码。请看这里,谢谢@James。我会尽快在SiddharthVerma试试。