我正在尝试使用AES加密Android上的字符串.先前使用Diffie-Hellman算法确定对称密钥,并且似乎没问题(密钥长度为128位,见下文).
不过,我得到了一个 InvalidKeyException: "Key length not 128/192/256 bits."
码:
KeyAgreement keyAgree = KeyAgreement.getInstance("DH", "BC");
keyAgree.init(this.smartphonePrivKey);
keyAgree.doPhase(serverPubKey, true);
SecretKey key = keyAgree.generateSecret("AES");
System.out.println("Key Length: " + key.getEncoded().length);
System.out.println("Key Algorithm: "+ key.getAlgorithm());
System.out.println("Key Format: "+ key.getFormat());
byte[] encrypted = null;
Cipher cipher;
try {
cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
System.out.println("Allowed Key Length: "
+ cipher.getMaxAllowedKeyLength("AES"));
cipher.init(Cipher.ENCRYPT_MODE, key);
encrypted = cipher.doFinal("YEAH".getBytes("UTF8"));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) { …Run Code Online (Sandbox Code Playgroud) 我正在编写一个不能在root设备上运行的应用程序.我想存储一些安全数据,这只能在非root设备上进行,因为没有人可以访问/ data/data/package-name中的文件.
有人知道吗:
1)是否可以阻止在root设备上安装应用程序?我读了一些关于Android Market的"版权保护机制"的内容.此功能似乎已过时,并由许可功能取代.但是,许可仅适用于付费应用程序,而且我的免费许可......
2)是否可以通过编程方式检查设备是否已植根?如果可以这样做,我可以简单地停止应用程序,如果设备已植根.
任何有关此主题的帮助表示赞赏!
Android设备和笔记本电脑之间的蓝牙连接是否默认加密?蓝牙服务器在Android智能手机上启动,因此连接由笔记本电脑启动.
谢谢,彼得
我正在编写一个通过HTTPS与服务器应用程序通信的Android应用程序.在服务器端,我必须绝对确定Android应用程序的完整性.这意味着服务器应用程序需要确保它与我开发的Android应用程序进行通信,而不是使用重新编写的应用程序进行通信(例如,在反编译原始应用程序之后或在植入设备之后).
有可能确保吗?也许有可能与apk文件的签名?
任何提示都表示赞赏.
问候,彼得