SHOW:
|
|
- or go back to the newest paste.
| 1 | public static byte[] AES_decrypt(byte[] inputData) throws CryptoException, IOException {
| |
| 2 | ||
| 3 | byte[] keyData = "Hello world".getBytes(); | |
| 4 | AESKey key = new AESKey(keyData, 0, 256); | |
| 5 | ||
| 6 | AESDecryptorEngine engine = new AESDecryptorEngine(key); | |
| 7 | PKCS5UnformatterEngine uengine = new PKCS5UnformatterEngine(engine); | |
| 8 | ||
| 9 | ByteArrayInputStream input = new ByteArrayInputStream(inputData); | |
| 10 | BlockDecryptor decryptor = new BlockDecryptor(uengine, input); | |
| 11 | byte[] plaintextAndHash = new byte[1024]; | |
| 12 | ByteArrayOutputStream output = new ByteArrayOutputStream(); | |
| 13 | int bytesRead=0; | |
| 14 | ||
| 15 | do {
| |
| 16 | bytesRead =decryptor.read(plaintextAndHash); | |
| 17 | if(bytesRead!=-1){
| |
| 18 | output.write(plaintextAndHash,0,bytesRead); | |
| 19 | } | |
| 20 | } while ( bytesRead != -1 ); | |
| 21 | ||
| 22 | return output.toByteArray(); | |
| 23 | } | |
| 24 | ||
| 25 | public static byte[] AES_decrypt2(byte[] inputData) throws CryptoException, IOException {
| |
| 26 | byte[] keyData = calculateMD5("Hello world");
| |
| 27 | AESKey aesKey = new AESKey(keyData); | |
| 28 | ||
| 29 | AESDecryptorEngine engine = new AESDecryptorEngine(aesKey); | |
| 30 | PKCS5UnformatterEngine uengine = new PKCS5UnformatterEngine(engine); | |
| 31 | ||
| 32 | ByteArrayInputStream istream = new ByteArrayInputStream(inputData); | |
| 33 | BlockDecryptor decryptor = new BlockDecryptor(uengine, istream); | |
| 34 | ||
| 35 | byte[] temp = new byte[100]; | |
| 36 | DataBuffer dbuff = new DataBuffer(); | |
| 37 | int bytesRead = 0; | |
| 38 | ||
| 39 | for (;;){
| |
| 40 | bytesRead = decryptor.read(temp); | |
| 41 | dbuff.write(temp, 0, bytesRead); | |
| 42 | if (bytesRead < 100) break; | |
| 43 | } | |
| 44 | ||
| 45 | byte[] plainData = dbuff.getArray(); | |
| 46 | int plainDataLength = plainData.length - SHA1Digest.DIGEST_LENGTH; | |
| 47 | byte[] decryptedData = new byte[plainDataLength]; | |
| 48 | byte[] hash = new byte[SHA1Digest.DIGEST_LENGTH]; | |
| 49 | ||
| 50 | System.arraycopy(plainData, 0, decryptedData, 0, plainDataLength); | |
| 51 | System.arraycopy(plainData, plainDataLength, hash, 0, SHA1Digest.DIGEST_LENGTH); | |
| 52 | ||
| 53 | SHA1Digest digest = new SHA1Digest(); | |
| 54 | digest.update(plainData); | |
| 55 | byte[] hash2 = digest.getDigest(); | |
| 56 | ||
| 57 | if (!Arrays.equals(hash, hash2)) throw new RuntimeException(); | |
| 58 | ||
| 59 | return decryptedData; | |
| 60 | } | |
| 61 | ||
| 62 | /* | |
| 63 | Library MD5: http://mobilepit.com/10/compact-md5-class-library-for-j2me-javame-app.html | |
| 64 | */ | |
| 65 | private static byte[] calculateMD5(String input){
| |
| 66 | byte[] plain = input.getBytes(); | |
| 67 | MD5 md5 = new MD5(plain); | |
| 68 | return md5.doFinal(); | |
| 69 | } |