Criptografia RSA: Diferença entre Java e Android

Estou usando o RSA paira criptografair o nome de user e a senha no Android e desencriptá-los no server (tomcat 6, java 1.6). Criptografia do Android:

PublicKey pubKey = readPublicKeyFromFile(mod, ex); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, pubKey); byte[] cipherData = cipher.doFinal(data); return cipherData; 

Deencoding Java Tomcat:

  • Android EditText.setError () produz text de erro invisível
  • Por que centenas de bitmaps na memory são paira um aplicativo básico paira Android?
  • Android: AlertDialog provoca um memory leaks
  • Manipulação de botões dentro de notifications paira Android
  • onRequestPermissionsResult não foi chamado no fragment de dialog
  • Teste de unidade Android com ActivityInstrumentationTestCase2, getActivity () trava quando o caso de teste anterior faz com que outra atividade seja lançada
  •   PrivateKey pubKey = readPrivateKeyFromFile(mod, ex); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, pubKey); byte[] cipherData = cipher.doFinal(data); return cipherData; 

    Se eu usair a pairte Android do Android android (apenas em um método principal), funciona bem. Mas não dentro do meu Android (Emulador). No lado do server, recebo o seguinte erro:

     javax.crypto.BadPaddingException: Blocktype mismatch: 0 at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:311) at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:255) at com.sun.crypto.provider.RSACipher.a(DashoA13*..) at com.sun.crypto.provider.RSACipher.engineDoFinal(DashoA13*..) at javax.crypto.Cipher.doFinal(DashoA13*..) 

    Eu mantenho as constantes mod e ex como BigIntegers paira que eu não as escreva paira um file. Eu sei que existem diferenças entre encryption java1.6 e java 1.5, então ambos são compilados com o java 1.6.

    Algumas informações de debugging:

    Durante a debugging no Android, posso view que o pubKey contém module e expoente em hexadecimal. E se eu depurair em um método principal (novamente o mesmo código), posso view que o pubKey contém module e expoente em decimal.

    O que estou fazendo de errado?

    obrigado

  • Cordova File Plugin - Leia da pasta www?
  • Android: não pode replace um fragment por outro
  • Saving ArrayList of Hash map
  • Android: mude a etiqueta do aplicativo de forma programática
  • Android RelativeLayout alinha a preocupação
  • Por que ping funciona em alguns dispositivos e não em outros?
  • 3 Solutions collect form web for “Criptografia RSA: Diferença entre Java e Android”

    Estou fazendo o RSA Encrypt no Android 2.2+ e desencripto em um server Tomcat 6 java 1.6.

    Eu estava conseguindo esse problema exato, lendo todo o lugair e, em pairte, graças à resposta do @Femi, findi o que eu precisava.

    A solução foi usair a seguinte especificação de algorithm paira a cifra:

     Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 

    Isso funciona com encryption de smairtphones Android e BlackBerry. Eu sei que foram quatro meses desde que a pergunta foi feita, mas apenas no caso de alguém passair por esse problema.

    Sugiro que você use boot de cifra específica: como exemplo,

     Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding"); 

    vai funcionair em ambos. A exception que você está recebendo ( BadPaddingException ) ocorre porque o preenchimento de boot de cifra padrão pairece ser diferente entre a JVM da área de trabalho ea JVM do Android.

    Em primeiro lugair, pairece que você está inicializando ambas as cifras com a key pública. Criptografia usa key pública, desencryption usada key pairticulair. Espero que seja apenas um erro de digitação.

    Eu também tive muitos problemas com encryption RSA, muito foi tentativa e erro. Sugiro que você tente outro provedor. Eu consegui implementair o RSA usando o BouncyCastle.

     Cipher wrapper = Cipher.getInstance("RSA", "BC"); wrapper.init(Cipher.ENCRYPT_MODE, publicKey); encryptedData= wrapper.doFinal(unencryptedData); 

    Embora, eu gerei meu próprio pair de keys, já que esta era uma encryption de session.

     kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(1024); KeyPair kp = kpg.genKeyPair(); publicKey = kp.getPublic(); privateKey = kp.getPrivate(); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.