Merge branch 'develop' of ssh://amuz.es:29418/spi-ca/simple-encryptor into develop
# Conflicts: # build.gradle # gradle/wrapper/gradle-wrapper.properties
This commit is contained in:
commit
ceefc622ad
|
@ -0,0 +1,119 @@
|
||||||
|
import javax.crypto.Cipher;
|
||||||
|
import java.security.*;
|
||||||
|
import java.security.spec.InvalidKeySpecException;
|
||||||
|
import java.security.spec.PKCS8EncodedKeySpec;
|
||||||
|
import java.security.spec.X509EncodedKeySpec;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RSA Helper Encryption Class
|
||||||
|
* Created by brianplummer on 4/29/14.
|
||||||
|
*/
|
||||||
|
public class RSACryptors {
|
||||||
|
|
||||||
|
//key length
|
||||||
|
public static final int KEY_LENGTH = 4096;
|
||||||
|
//main family of rsa
|
||||||
|
public static final String RSA = "RSA";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* generate a 2048 bit RSA key
|
||||||
|
*
|
||||||
|
* @return a 2048 bit rsa key
|
||||||
|
*/
|
||||||
|
public static KeyPair generateRSAKey() {
|
||||||
|
KeyPairGenerator kpg = null;
|
||||||
|
try {
|
||||||
|
//get an RSA key generator
|
||||||
|
kpg = KeyPairGenerator.getInstance(RSA);
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
System.out.printf("%s\n", e.getMessage());
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
//initialize the key to 2048 bits
|
||||||
|
kpg.initialize(KEY_LENGTH);
|
||||||
|
//return the generated key pair
|
||||||
|
return kpg.genKeyPair();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main RSA encrypt method
|
||||||
|
*
|
||||||
|
* @param plain plain text you want to encrypt
|
||||||
|
* @param publicKey public key to encrypt with
|
||||||
|
* @return encrypted text
|
||||||
|
*/
|
||||||
|
public static byte[] encryptRSA(byte[] plain, PublicKey publicKey) {
|
||||||
|
byte[] enc = null;
|
||||||
|
try {
|
||||||
|
Cipher cipher = Cipher.getInstance(RSA);
|
||||||
|
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
|
||||||
|
enc = cipher.doFinal(plain);
|
||||||
|
}
|
||||||
|
//no need to catch 4 different exceptions
|
||||||
|
catch (Exception e) {
|
||||||
|
System.out.printf("%s\n", e.getMessage());
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return enc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main RSA decrypt method
|
||||||
|
*
|
||||||
|
* @param enc encrypted text you want to dcrypt
|
||||||
|
* @param privateKey private key to use for decryption
|
||||||
|
* @return plain text
|
||||||
|
*/
|
||||||
|
public static byte[] decryptRSA(byte[] enc, PrivateKey privateKey) {
|
||||||
|
byte[] plain = null;
|
||||||
|
try {
|
||||||
|
Cipher cipher = Cipher.getInstance(RSA);
|
||||||
|
cipher.init(Cipher.DECRYPT_MODE, privateKey);
|
||||||
|
plain = cipher.doFinal(enc);
|
||||||
|
}
|
||||||
|
//no need to catch 4 different exceptions
|
||||||
|
catch (Exception e) {
|
||||||
|
System.out.printf("%s\n", e.getMessage());
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
return plain;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException {
|
||||||
|
final StringBuffer log = new StringBuffer();
|
||||||
|
|
||||||
|
// KeyPair pair = RSACryptors.generateRSAKey();
|
||||||
|
// System.out.println(new String(Base64.encode(pair.getPrivate().getEncoded())));
|
||||||
|
// System.out.println("\n\n");
|
||||||
|
// System.out.println(new String(Base64.encode(pair.getPublic().getEncoded())));
|
||||||
|
final String priKey = "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";
|
||||||
|
final String pubKey = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtHXqkz9U/MjgLxrvFF8cdhEQ3qHxekR7qpCdXZG2glOfZv3R9S+frTRCljcqmSG3xf6Of1E40QP6z9qENowPSBbWwU0FTH9VQxN5pwmTM1NwE1+7FlNHo9lrh6YAVeQ3a6MlFlWRpqXLxdT5wi1iB9qyxQNEhKALKbYfL6la7GO8P5zzrFJsAddFvikSoSWtVIRgVD47WqtmN715w5MKmk99uiuQ6YxReMBFqGLIZpJALQXrVNLTwpG6pDSxgY+6mYh3XK98Ajq6GtvJKWEYJg+p3s1XZFnFXUTWa/xx8XbQBzbcR/uggH1N+pFXexnWFuQ1J6B17eKtoWdzNM5fVD+GWZOTApcLuFvQC2+oy8WOWAXCpC7gF7PeJREhC4RCZ2q3Ez6DH4ba+mL1biQTmoxx8pVdifvCUNfDSPhCEycYfyXlqz7UBh/3WEvb9DKoFxTLuu1ADjqLeu/vHtQ9iKuWzF/0osdbsFQjFvwkaTznzOaovx/PRpI0huIdge/RPultGPmzp0zaEkoI0H9wIaRrnYSprInUf+odhdUYYEzDFOItymZlOuon93SYtxrLZkHZL3trxPmE3Pqhq/dURwbzdOVqzQ6M+nOVDznsM3JBmYjLee351rQp2XP3fFh88epxRvVn9QstUiWt6e0hvBE299Gh4hN9vKcWrbpJ1X0CAwEAAQ==";
|
||||||
|
final X509EncodedKeySpec pubSpec = new X509EncodedKeySpec(Base64.decode(pubKey));
|
||||||
|
final PKCS8EncodedKeySpec priSpec = new PKCS8EncodedKeySpec(Base64.decode(priKey));
|
||||||
|
final KeyFactory kf = KeyFactory.getInstance("RSA");
|
||||||
|
final PublicKey pubKeyObj=kf.generatePublic(pubSpec);
|
||||||
|
final PrivateKey priKeyObj=kf.generatePrivate(priSpec);
|
||||||
|
final String source="encryptRSA";
|
||||||
|
log.append(" source : ");
|
||||||
|
log.append(source);
|
||||||
|
log.append('\n');
|
||||||
|
|
||||||
|
final byte[] encrypted=RSACryptors.encryptRSA(source.getBytes(),pubKeyObj);
|
||||||
|
|
||||||
|
|
||||||
|
log.append(" {");
|
||||||
|
for (int j = 0; j < encrypted.length; j++) {
|
||||||
|
log.append(String.valueOf(encrypted[j]) + ",");
|
||||||
|
}
|
||||||
|
log.append(" }\n");
|
||||||
|
final byte[] decrypted=RSACryptors.decryptRSA(encrypted,priKeyObj);
|
||||||
|
log.append(" trans : ");
|
||||||
|
log.append(new String(decrypted));
|
||||||
|
log.append('\n');
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println(log.toString());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue