Articles of encryption

Android和C#之间的encryption

我正在使用以下C#源代码使用AES(ECB 256)encryption纯文本: public static string Encode(string PlainText) { byte[] Key = ASCIIEncoding.UTF8.GetBytes("12345678901234567890123456789012"); string encrypted = null; RijndaelManaged rj = new RijndaelManaged(); rj.BlockSize = 256; rj.KeySize = 256; rj.Key = Key; rj.GenerateIV(); byte[] IV = rj.IV; rj.Mode = CipherMode.ECB; rj.Padding = PaddingMode.Zeros; try { using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new […]

用较less的内存来encryption/解密大文件的最佳做法

我想开发一个Android应用程序,用RSA和一些对称encryptionalgorithm来encryption和解密大文件(〜500Mb)。 我怎样才能做到这一点? 只有几MB内存的设备上使用什么是最好的解决scheme? 问候鲍比

具有SHA-1的.NET RSACryptoServiceProvider的Java等价物

我在C#中有以下数据签名代码 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); string PrivateKeyText = "<RSAKeyValue><Modulus>….</D></RSAKeyValue>"; rsa.FromXmlString(PrivateKeyText); string data = "my data"; byte[] SignedByteData = rsa.SignData(Encoding.UTF8.GetBytes(data), new SHA1CryptoServiceProvider()); 我想在Java(Android)中重现相同的代码: String modulusElem = "…"; String expElem = "…"; byte[] expBytes = Base64.decode(expElem, Base64.DEFAULT); byte[] modulusBytes = Base64.decode(modulusElem, Base64.DEFAULT); BigInteger modulus = new BigInteger(1, modulusBytes); BigInteger exponent = new BigInteger(1, expBytes); try { […]

Android:如何解压缩一个encryption的zip文件

在winzip我能够使用一些密钥encryption文件。 在我的Android应用程序中,我正在使用encryption的zip文件。 我知道解压缩文件的方式(不encryption)。 但我怎样才能解压在Android的encryptionzip文件?

蓝牙文件交换完全安全吗?

当我通过蓝牙传输文件时,可能会遇到什么样的攻击? 此外,Android手机之间通过蓝牙encryption传输的文件?

Android的应用/签名validation如何工作?

我想用两件事来介绍这个问题,所以我可以缩小我的实际问题的地方: a)我已经完成了软件开发,但从来没有为Android b)我熟悉PKI和encryption,哈希和数字签名,等等等等 这就是说,我无法跟踪有关Android在哪里以及如何validation应用程序创build者的更多信息。 我听到很多不同的信息,所以我正在尝试综合以更好地了解工作stream程。 我知道每个应用程序开发人员都有自己的私钥/公钥对,他们通过对APK进行散列来签名他们的应用程序(如果我没有弄错的话,大多数情况下用SHA-1),然后你就去了。 你上传它和(我相信)公钥在APK里面的META INF里。 这很多我明白。 我的问题是,这是如何涉及到用户下载应用程序本身。 我知道电话检查,以确保该应用程序是有效签名,并签名也有作者等信息包括在内。 但是我也看到,应用程序是自签名的,而且Google Play(或者现在称为“市场”的任何东西)没有实现CA,并且没有身份validation? 但是,我的问题是,什么阻止人们在另一个开发人员的名字上下载应用程序(众包除外)呢? 如果手机只检查有效签名,是否意味着应用程序上传时唯一的身份validation方式? 如果是这样的话,应用程序市场如何检查它? 是通常的 – 在文件上使用私钥并validation签名? 还是开发者不得不向市场提供他们的私钥进行authentication?

可序列化对象的ArrayList的encryption保存和解密加载

我保存和加载SD卡中包含这两种方法的序列化对象的ArrayList的文件 保存方法 public static void saveUserList(ArrayList<User> userList) { if (storageAvailable()) { try { createFolder(); FileOutputStream userList = new FileOutputStream( baseDir + File.separator + baseAppDir + File.separator + fileName); ObjectOutputStream oos = new ObjectOutputStream( userList); oos.writeObject(userList); oos.close(); } catch (Exception exc) { exc.printStackTrace(); } } } 加载方法 public static ArrayList<User> loadUserList() { if (storageAvailable()) { ArrayList<User> […]

Android N中无法使用SecureRandom提供程序“Crypto”来确定生成密钥

用户可以购买我的应用程序的“专业版”。 当他们这样做,我存储和validation他们的购买如下。 结合用户的UUID和另一个唯一的string。 结果string然后使用静态种子进行encryption。 我用SecureRandom.getInstance("SHA1PRNG", "Crypto")做这个 – 这是问题! 得到的encryptionstring就是“解锁码”。 因此,我总是知道用户期望的唯一解锁码值。 当用户购买“Pro”时,我将“解锁码”存储在数据库中。 通过查看数据库中存储的“解锁代码”是否与基于其唯一信息的预期代码相匹配来查看用户是否具有“专业”。 所以,不是最好的系统,但是对于我不起眼的应用程序来说,所有的东西都被混淆了。 问题是SecureRandom.getInstance("SHA1PRNG", "Crypto")在N上失败,因为不支持“Crypto”。 我了解到,依靠特定的提供商是不好的做法,Crypto不支持N。 哎呀。 所以我有一个问题: 我依靠价值种子对的encryption总是有相同的输出。 Android N不支持我使用的encryption提供程序,所以我不知道如何确保N上的encryption输出与其他设备上的encryption输出相同。 我的问题: 是否可以在我的APK中包含“encryption”,以便它始终可用? 我可以在Android N上encryption一个值 – 种子对时确保相同的输出吗? 我的代码: public static String encrypt(String seed, String cleartext) throws Exception { byte[] rawKey = getRawKey(seed.getBytes(), seed); byte[] result = encrypt(rawKey, cleartext.getBytes()); return toHex(result); // "unlock code" which must […]

如何将Crypto ++与Jni或NDK一起用于Android应用程序

我从Crypto ++ 这里下载。 我find了一些方法来build立它与视觉工作室。 所以我不知道如何将它用于jni或Ndk的Android应用程序。

如何使用Android密钥存储提供程序存储密钥

我正在尝试使用Android 4.3中可用的Android密钥存储提供程序来安全地保存私钥,然后使用此私钥来encryption和解码数据。 到目前为止,我认为我已经实施了正确的方法和代码,但是我目前面临着一个我无法弄清楚的奇怪问题。 我有一个名为KeyStorage的类,用于创build密钥对,加载KeyStore并检索私钥,该类的代码如下所示: public class KeyStorage { public static final String ANDROID_KEYSTORE = "AndroidKeyStore"; private KeyStore keyStore; public void loadKeyStore() { try { keyStore = KeyStore.getInstance(ANDROID_KEYSTORE); keyStore.load(null); Enumeration<String> aliases = keyStore.aliases(); while(aliases.hasMoreElements()) Log.e("E", "Aliases = " + aliases.nextElement()); } catch (Exception e) { // TODO: Handle this appropriately in your app e.printStackTrace(); } } […]