· 9 years ago · Aug 29, 2016, 12:18 PM
1public void encryptdata(byte[] data) {
2 Encrypter encrypter = new Encrypter();
3 HashGenerator hashGenerator = new HashGenerator();
4 try {
5 byte[] e = encrypter.generateSessionKey();
6 byte[] encryptedData = encrypter.encryptUsingSessionKey(e, data);
7 byte[] hmac = hashGenerator.generateSha256Hash(data);
8 byte[] encryptedHmacBytes = encrypter.encryptUsingSessionKey(e, hmac);
9 this.encodedSessionKey = encodeBase64(e);
10 this.encodedHmac = encodeBase64(encryptedHmacBytes);
11 this.encodedData = encodeBase64(encryptedData);
12 } catch (Exception var6) {
13 var6.printStackTrace();
14 throw new RuntimeException(var6);
15 }
16}
17
18class Encrypter {
19private static final String JCE_PROVIDER = "BC";
20private static final int SYMMETRIC_KEY_SIZE = 256;
21
22Encrypter() {
23}
24
25public byte[] generateSessionKey() throws NoSuchAlgorithmException, NoSuchProviderException {
26 KeyGenerator kgen = KeyGenerator.getInstance("AES", "BC");
27 kgen.init(256);
28 SecretKey key = kgen.generateKey();
29 byte[] symmKey = key.getEncoded();
30 return symmKey;
31}
32
33public byte[] encryptUsingSessionKey(byte[] skey, byte[] data) throws InvalidCipherTextException {
34 PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new AESEngine(), new PKCS7Padding());
35 cipher.init(true, new KeyParameter(skey));
36 int outputSize = cipher.getOutputSize(data.length);
37 byte[] tempOP = new byte[outputSize];
38 int processLen = cipher.processBytes(data, 0, data.length, tempOP, 0);
39 int outputLen = cipher.doFinal(tempOP, processLen);
40 byte[] result = new byte[processLen + outputLen];
41 System.arraycopy(tempOP, 0, result, 0, result.length);
42 return result;
43}
44
45static {
46 Security.addProvider(new BouncyCastleProvider());
47}
48
49class HashGenerator {
50public HashGenerator() {
51}
52
53public byte[] generateSha256Hash(byte[] message) {
54 String var2 = "SHA-256";
55 String var3 = "BC";
56 byte[] var4 = null;
57
58 try {
59 MessageDigest var7 = MessageDigest.getInstance(var2, var3);
60 var7.reset();
61 var4 = var7.digest(message);
62 } catch (Exception var6) {
63 var6.printStackTrace();
64 }
65
66 return var4;
67}