Articles of 加密

Android AES-128加密/解密文件非常慢。 我怎样才能提高速度

我正在开发一个Android应用程序,可以保护像Vaulty和Keep安全的图像和video。 我正在尝试使用AES-128加密/解密技术来存储图像和video。 我通过分别拍摄尺寸为5.13,4.76和5.31的3个样本图像来尝试它。 但加密消耗的时间分别为25秒,22秒,27秒,解密时间分别为31秒,30秒,34秒。 我在HTC One X上测试它。 这样的速度对我的应用程序来说不可行,因为用户可以快速滚动和查看图像而不会中断。 你能否建议我如何提高性能(速度)或者我应该切换到其他算法? 你可以建议我使用任何其他技术来快速加密/解密图像和video,而不会过多地影响安全性。 我尝试了Vaulty并保持安全 ,而且它们非常快。 据说Vaulty使用的是AES-256,但在加密和查看图像方面仍然非常快速且反应灵敏。 vaulty如何快速使用AES-256? 我正在使用的代码是: static void encrypt(String filename) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException { // Here you read the cleartext. File extStore = Environment.getExternalStorageDirectory(); startTime = System.currentTimeMillis(); Log.i(“Encryption Started”,extStore + “/5mbtest/”+filename); FileInputStream fis = new FileInputStream(extStore + “/5mbtest/”+filename); // This stream write the encrypted […]

加密sqlite数据库Android:

嗨,在我的运行应用程序中,我已经有一个现有的sqlite数据库。 现在问题是任何人都可以从设备中提取sqlite database并可以使用它。 现在我需要encrypt the sqlite file 。 我发现SQLCipher用于加密sqlite数据库。 但真正的问题是我对SQLCipher并且不知道它是如何工作的。 尝试使用不同的项目。 什么都没有帮助。 请有人告诉我如何加密我的sqlite数据库。 提前致谢。

在android中使用基于密码的加密

下面的代码虽然有效,但是当我连续投掷“给定最后一块没有正确填充”时,有些时候也是如此。 我觉得我在某处发生了一个小错误。 你能帮我解决这个问题吗? exception堆栈: Exception in thread “main” javax.crypto.BadPaddingException: Given final block not properly padded at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:811) at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:676) at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:313) at javax.crypto.Cipher.doFinal(Cipher.java:2086) at MCrypt.decrypt(MCrypt.java:87) at MCrypt.main(MCrypt.java:21) 我的代码: import java.security.SecureRandom; import java.security.spec.KeySpec; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.SecretKeySpec; public class MCrypt { private int iterationCount = 10000; private int […]

即时解密音频/video到MediaPlayer

我一直在寻找几天,但无法得到如何做到这一点的明确答案。 我的SD卡上有一些加密的音频/video文件,我想将它发送到MediaPlayer,并在解密工作的同时开始播放。 它最初会创建一个缓冲区,当它有足够的初始数据开始播放时,MediaPlayer将开始播放,并在后台解密并继续发送数据。 我环顾四周,大部分解决方案似乎都指向了localhttpserver,然后将文件发送到服务器,当它返回时,它将开始播放音频/video,就像直播一样。 我不知道的是解密代码在哪里? 在服务器端? 如果是这样,在哪一部分呢? 我也看过这个http://libeasy.alwaysdata.net/解决方案,它可能能够解决它,但我似乎无法理解它是如何工作的。 我知道它创建了一个本地服务器,但在Cipher部分,我自己的解密如何发挥作用? private void myPlay(String path) { mServer = new LocalSingleHttpServer(); mServer.setCipher(myGetCipher()); mServer.start(); path = mServer.getURL(path); mVideoView.setVideoPath(path); mVideoView.start(); } public void onCompletion(MediaPlayer mp) { // MediaPlayer.OnCompletionListener interface mServer.stop(); } 因为我对Android开发很新,所以如果我不清楚或者其他什么,请耐心等待。 谢谢。

加密种子的Android设备/帐户特定ID

这可能是以前以多种forms提出过来的问题,但我还没有看到它问过这种方式,我想对如何继续提出一些意见。 我正在开发一个应用程序,它需要将凭据存储到设备上的第三方Web服务。 我希望加密这些凭据,但我也不希望将种子存储在设备上的代码/中以防止可能的劫持。 该应用程序还支持使用Googles云备份function进行备份,进一步需要加密。 我的想法是,如果我能find一个唯一的标识符,那可以用作种子。 有一些奇怪的要求使这很困难。 在所有情况下,对于给定的硬件/用户组合,ID必须是唯一的和相同的。 它不能简单地绑定到设备或用户,它必须是两者的组合。 必须提供无关紧要的东西; Wifi和蓝牙MAC地址是不可能的,因为它们在关闭时在某些设备上不可用。 根据我的阅读,TelephonyManager ID(SIM等)并非在所有设备上都可用。 根据我的阅读,ANDROID_ID将不会出现在任何情况下。 该应用程序将在多个市场(例如亚马逊Appstore)发布,因此Google帐户不一定会出现。 进行工厂擦除不应影响用于生成此ID的任何内容(这样用户可以不间断地备份,擦除和恢复)。 执行OTA升级不应影响用于生成此ID的任何内容(请参阅上述原因)。 如果他们必须在卸载/重新安装后重新进行身份validation,这是可以的。 我明白这个值显然可以被其他应用程序检索,这就是为什么我打算哈希它,进一步播种应用程序UID以及。 如果有人觉得要求不切实际,我也想听听。 特别是鉴于最近的黑客马拉松,我希望能够至少说“如果有人可以妥协,那么手机上没有任何东西是安全的”。

Android 4.4上的解密错误

我有加密\解密文件的算法: private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception { SecretKeySpec skeySpec = new SecretKeySpec(raw, “AES”); Cipher cipher = Cipher.getInstance(“AES/ECB/PKCS5Padding”); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] encrypted = cipher.doFinal(clear); return encrypted; } private static byte[] getRawKey(byte[] seed) throws Exception { KeyGenerator kgen = KeyGenerator.getInstance(“AES”); SecureRandom sr = new SecureRandom(); sr.setSeed(seed); kgen.init(sr); // 192 and 256 bits may […]

获取错误java.lang.ArrayIndexOutOfBoundsException:RSA块的数据太多

我有私人pem密钥文件,我使用该文件进行签名和加密数据。 签名工作正常,我也能够在另一个平台上validation,但在加密数据时,我得到以下错误: 04-04 09:55:51.821: E/AndroidRuntime(2725): FATAL EXCEPTION: Thread-102 04-04 09:55:51.821: E/AndroidRuntime(2725): java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block 04-04 09:55:51.821: E/AndroidRuntime(2725): at com.android.org.bouncycastle.jce.provider.JCERSACipher.engineDoFinal(JCERSACipher.java:457) 04-04 09:55:51.821: E/AndroidRuntime(2725): at javax.crypto.Cipher.doFinal(Cipher.java:1106) 04-04 09:55:51.821: E/AndroidRuntime(2725): at com.example.testsigning.MainActivity.rsaEncrypt(MainActivity.java:185) 04-04 09:55:51.821: E/AndroidRuntime(2725): at com.example.testsigning.MainActivity$1.run(MainActivity.java:51) 04-04 09:55:51.821: E/AndroidRuntime(2725): at java.lang.Thread.run(Thread.java:856) 以下是从私有文件中提取密钥的代码段: // Read the file into string String privKeyPEM = readFile(“/mnt/sdcard/rsa_key”); privKeyPEM […]

如何使用ExoPlayer播放DES加密文件

我正在使用ExoPlayer从设备的SD卡播放媒体文件(mp4s .h264编码)。 一些文件是DES加密的。 我可以解密文件并返回一个inputStream,但后来我不确定如何使用ExoPlayer播放这个inputStream。 任何帮助,将不胜感激。 protected void playVideo(File file) { InputStream is; if (file.getName().endsWith(“.DES”)) { is = FileManager.decryptFile(file); //what to do with this input stream? } Uri uri = Uri.parse(file.getAbsolutePath()); if (mPlayer != null) { mPlayer.release(); } mPlayer = new VideoPlayer(getRendererBuilder(uri)); mPlayer.addListener(this); if (mLastPosition > 0) { mPlayer.seekTo(mLastPosition); } mPlayer.prepare(); mPlayer.setSurface(mSurface); mPlayer.setPlayWhenReady(true); }

Android中的慢速AES解密

我尝试使用AES 128位密钥解密4.2 MB的.dcf文件,但解密时需要33秒(在函数cipher.doFinal(数据)上),这是正常的吗? 这是一段代码: long start = System.currentTimeMillis()/1000L; try { SecretKeySpec skeySpec = new SecretKeySpec(key, “AES”); Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”); cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivspec); android.util.Log.d(“TEST”, “Start decoding….” + String.valueOf(length)); byte[] decrypted = cipher.doFinal(content); File file2 = new File(Environment.getExternalStorageDirectory().getPath() + “/test.mp3”); OutputStream os = new FileOutputStream(file2); os.write(decrypted); } catch (Exception ex) { ex.printStackTrace(); } long end = […]

如何在本地存储SQLcipher密码

我正在使用一个使用SQLcipher并且它处于脱机状态的应用程序,因此我不可能从服务器获取密钥以与加密数据库进行通信。我必须将其安全地存储在设备中的某个位置。 一种解决方案是优先存储密钥,但如果手机已植根,则可以访问这些文件夹。 应用程序中使用的数据是高度机密的,我不能让它被访问。 如果你推荐对这种情况进行排序的话会很棒。 提前致谢。