我需要从一个Java客户端发送加密数据到一个C#服务器。现在我正在学习如何使用AES对数据进行加密(这是要求)。按照这个已接受的答案 android encryption/decryption with AES ,我正在做以下事情:
由于该算法使用了使用“keyStart”的“SecureRandom”,我不确定是否可以在没有“SecureRandom”的情况下在C#甚至另一个Java程序中解码。
只知道“keyStart”的值,这种加密/解密是否有效?或者因为我使用了“SecureRandom”,仍然需要传递其他内容才能解密?
此外,是否有更好的方法来完成这项任务,还是这个方法已经足够好了?
byte[] keyStart = "qweroiwejrwoejlsifeoisrn".getBytes(); // Random character string
byte[] toEncrypt = myMessageString.getBytes();
keyGen = KeyGenerator.getInstance("AES");
sr = SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(keyStart);
keyGen.init(128, sr);
SecretKey secretKey = keyGen.generateKey();
byte[] secretKeyByte = secretKey.getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(secretKeyByte, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
cipher.doFinal(toEncrypt);
由于该算法使用了使用“keyStart”的“SecureRandom”,我不确定是否可以在没有“SecureRandom”的情况下在C#甚至另一个Java程序中解码。
只知道“keyStart”的值,这种加密/解密是否有效?或者因为我使用了“SecureRandom”,仍然需要传递其他内容才能解密?
此外,是否有更好的方法来完成这项任务,还是这个方法已经足够好了?