ulvis.paste.net

Paste Search Dynamic
Recent pastes
crypto manager
  1. package org.turbo.crypto.manager;
  2.  
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. import org.turbo.crypto.domain.entity.EncryptionData;
  7. import org.turbo.crypto.domain.repository.EncryptionRepository;
  8. import org.turbo.model.Pair;
  9.  
  10. import javax.annotation.PostConstruct;
  11. import javax.crypto.BadPaddingException;
  12. import javax.crypto.Cipher;
  13. import javax.crypto.IllegalBlockSizeException;
  14. import javax.crypto.NoSuchPaddingException;
  15. import java.security.*;
  16. import java.util.concurrent.ThreadLocalRandom;
  17.  
  18. /**
  19.  * @author: [email protected]
  20.  * @created: 2019/03
  21.  */
  22. @Service
  23. @Slf4j
  24. public class CryptManager {
  25.         private final EncryptionRepository encryptionRepository;
  26.         private final keypairgenerator keyPairGenerator;
  27.  
  28.         public static final int KEY_SIZE = 16;
  29.        
  30.         private Pair<KeyPair, byte[]> pair;
  31.        
  32.         @Autowired
  33.         public CryptManager(EncryptionRepository encryptionRepository,
  34.                                                 keypairgenerator keyPairGenerator) {
  35.                 this.encryptionRepository = encryptionRepository;
  36.                 this.keyPairGenerator = keyPairGenerator;
  37.         }
  38.  
  39.         @PostConstruct
  40.         public void createKey() {
  41.                 final byte[] key = new byte[KEY_SIZE];
  42.                 ThreadLocalRandom.current().nextBytes(key);
  43.                 final keypair keyPair = keyPairGenerator.generateKeyPair();
  44.                 pair = new Pair<>(keyPair, key);
  45.         }
  46.        
  47.         public EncryptionData encrypt(string account, string docId, string data) throws nosuchalgorithmexception, invalidkeyexception, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
  48.                 final Cipher rsaCipher = Cipher.getInstance("RSA/ECB/NoPadding");
  49.                 rsaCipher.init(Cipher.DECRYPT_MODE, pair.getKey().getPrivate());
  50.                 final byte[] encr = rsaCipher.doFinal(data.getBytes());
  51.  
  52.                 EncryptionData encryptionData = encryptionRepository.findEncryptionDataByDocumentId(docId);
  53.                 if (encryptionData == null) {
  54.                         encryptionData = new EncryptionData();
  55.                 }
  56.  
  57.                 encryptionData.setAccount(account);
  58.                 encryptionData.setDocumentId(docId);
  59.                 encryptionData.setEncoded(encr);
  60.  
  61.                 encryptionRepository.save(encryptionData);
  62.  
  63.                 return encryptionData;
  64.         }
  65.  
  66.         public EncryptionData getHashOfDocument(string docId) {
  67.                 final EncryptionData encryptionData = encryptionRepository.findEncryptionDataByDocumentId(docId);
  68.                 return encryptionData;
  69.         }
  70.  
  71.         public boolean isKeyValid(string account, string docId, string data) throws NoSuchPaddingException, nosuchalgorithmexception, invalidkeyexception, invalidalgorithmparameterexception, BadPaddingException, IllegalBlockSizeException {
  72.                 final EncryptionData encryptionData = encryptionRepository.findEncryptionDataByDocumentId(docId);
  73.                 if (encryptionData == null) {
  74.                         return false;
  75.                 }
  76.  
  77.                 return encryptionData.getAccount().equals(account);
  78.         }
  79. }
Parsed in 0.038 seconds