当前位置: 首页 > 面试题库 >

Android加密

赵俊侠
2023-03-14
问题内容

我正在开发一个android应用程序,因此我需要对它的一方面使用加密。对于使用哪种算法(AES,DES,RSA等),我真的很冷漠。我知道Java有一个加密程序包,但我一点都不熟悉。有人可以发布有关如何执行加密/解密功能的示例吗?


问题答案:

java AES库中有一个缺陷,它允许侦听器在适当的情况下解密发送的数据包。请参见对Oracle Exploit Tool和Apache
MyFaces进行填充

话说回来,]看看这个SO问题Java256位AES加密。

从以下位置盗窃了Bouncy CastleAES示例:http://www.java2s.com/Code/Java/Security/EncryptionanddecryptionwithAESECBPKCS7Padding.htm

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class MainClass {
  public static void main(String[] args) throws Exception {
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());    
    byte[] input = "www.java2s.com".getBytes();
    byte[] keyBytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 
                 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 
                 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 
                 0x15, 0x16, 0x17 };

    SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");

    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");

    System.out.println(new String(input));

    // encryption pass
    cipher.init(Cipher.ENCRYPT_MODE, key);

    byte[] cipherText = new byte[cipher.getOutputSize(input.length)];
    int ctLength = cipher.update(input, 0, input.length, cipherText, 0);
    ctLength += cipher.doFinal(cipherText, ctLength);
    System.out.println(new String(cipherText));
    System.out.println(ctLength);

    // decryption pass
    cipher.init(Cipher.DECRYPT_MODE, key);
    byte[] plainText = new byte[cipher.getOutputSize(ctLength)];
    int ptLength = cipher.update(cipherText, 0, ctLength, plainText, 0);
    ptLength += cipher.doFinal(plainText, ptLength);
    System.out.println(new String(plainText));
    System.out.println(ptLength);
  }
}


 类似资料:
  • 问题内容: 我正在开发一个将文件上传到Amazon s3(应用程序的一部分)的应用程序。但是,当我生成文件的URL时,它会显示认证密钥,文件名等。我需要对URL进行加密。另外,我正在使用微小的URL来缩短URL,但是当我将curser放在链接上时,它会显示真实的URL。我寻找了md5,但无法正常工作。有什么建议吗? 问题答案: 我将尝试解释MD5的工作原理 输出是: 7f5976785d03c60

  • 我的Android应用程序实现了RSA加密,但后端无法解密应用程序生成的令牌。这是代码,公钥的开始行和结束行在调用之前都被删除了,会有什么问题吗? 后端团队提供了以下可以工作的示例代码,但它是针对桌面Java的。Android库没有base64.getEncoder方法。这和我写的非常相似,但我的就是不起作用。 我比较了每一步的字节数组值。桌面密码和android密码得到的输入完全相同。然而,来自

  • 我正在尝试为我的设置屏幕实现android jetpack首选项。一切正常,当我单击MultiSelectListPreference时,它会显示条目列表,但我没有什么问题, 为什么entryValues不能是整数数组?(字符串数组工作正常) 如何设置默认值?对于EG:我想在开始时将第二个和第三个条目设置为默认勾选。 下面是我的pref.xml文件的一部分 如果我将arrays.xml文件中的设置

  • 本文向大家介绍Android对称加密与非对称加密,包括了Android对称加密与非对称加密的使用技巧和注意事项,需要的朋友参考一下 凯撒密码 1. 介绍 凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3 的时候,所有的字母

  • 问题内容: 我有一个正在下载xml并将其解析为sql数据库的应用程序。我的问题是,一旦部署了应用程序,xml中的数据就很容易被抓取,其他人可能将我辛苦赚来的数据用于自己的邪恶目的/应用程序。基本上我需要使用php加密xml,然后使用android解密。我已经看过几个php类,它们可以很容易地加密,但是我不完全确定哪种加密方法与android兼容。 解决后编辑: 起初,我认为出于某种原因我不得不忽略

  • Android原生是不支持数据库加密的,所以要想加密数据库就需要使用其它的方式。而这个SDK是从原生Android4.0源码里单独移植SQLITE模块,并将这个模块编译时加入加密方法,因为SQLITE源码中是有加密的接口,所以移植时就只需将这个预编译参数加入和一些文件即可。 这个SDK只支持Android2.1以上的版本。