package ngse.remote_shell;
import org.bouncycastle.openssl.PEMReader;
import org.bouncycastle.openssl.PEMWriter;
import javax.crypto.Cipher;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.security.*;
import java.util.Date;
/**
* Created by Administrator on 2016/2/7.
*/
public class Tools {
static public String currentSeconds()
{
long seconds = new Date().getTime() / 1000;
return String.format("%-32d", seconds);
}
static public PrivateKey loadPrivKeyFromFile(String filename)
{
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
try {
FileReader fr = new FileReader(filename);
PEMReader pr = new PEMReader(fr);
KeyPair key = (KeyPair)(pr.readObject());
pr.close();
fr.close();
return key.getPrivate();
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
static public PublicKey loadPubKeyFromFile(String filename)
{
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
try {
FileReader fr = new FileReader(filename);
PEMReader pr = new PEMReader(fr);
PublicKey key = (PublicKey)(pr.readObject());
pr.close();
fr.close();
return key;
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
static public KeyPair newRSAKeyAndSave()
{
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
if (new File("./priv.txt").exists() ||
new File("./pub.txt").exists())
{
System.out.println("priv.txt/pub.txt exists, move away at first please.");
return null;
}
try {
byte[] input = "abc".getBytes();
Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding", "BC");
SecureRandom random = new SecureRandom();
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "BC");
generator.initialize(1024, random);
KeyPair pair = generator.generateKeyPair();
Key pubKey = pair.getPublic();
Key privKey = pair.getPrivate();
FileWriter fw = new FileWriter("./priv.txt");
PEMWriter pw = new PEMWriter(fw);
pw.writeObject(privKey);
pw.close();
fw.close();
FileWriter fw2 = new FileWriter("./pub.txt");
PEMWriter pw2 = new PEMWriter(fw2);
pw2.writeObject(pubKey);
pw2.close();
fw2.close();
return pair;
}
catch ( Exception e)
{
e.printStackTrace();
return null;
}
}
static public byte[] encryptWithPriKey(byte[] buf, PrivateKey p)
{
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
try {
Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, p);
return cipher.doFinal(buf);
}
catch ( Exception e)
{
e.printStackTrace();
return new byte[0];
}
}
static public byte[] decryptWithPriKey(byte[] buf, PublicKey p)
{
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
try {
SecureRandom random = new SecureRandom();
Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding", "BC");
cipher.init(Cipher.DECRYPT_MODE, p, random);
return cipher.doFinal(buf);
}
catch ( Exception e)
{
e.printStackTrace();
return null;
}
}
static public String toHexString(byte[] b)
{
int i;
StringBuffer sb = new StringBuffer();
char[] chars = {'0', '1','2','3', '4','5','6','7','8','9','a','b','c','d','e','f'};
for (i = 0; i < b.length; ++i)
{
int bb = b[i];
if (bb < 0) { bb += 256;}
int index;
index = bb>>4;
sb.append(chars[index]);
index = bb & 0x0f;
sb.append(chars[index]);
}
return sb.toString();
}
static private int hexChr2Int(char c)
{
char[] chars = {'0', '1','2','3', '4','5','6','7','8','9','a','b','c','d','e','f'};
int i;
for (i = 0; i < chars.length; ++i)
{
if (chars[i] == c)
{
return i;
}
}
return 16;
}
static public byte[] fromHexString(String s)
{
int i;
if ((s.length() % 2) != 0)
{
return new byte[0];
}
int len = s.length() / 2;
byte[] b = new byte[len];
for (i = 0; i < b.length; ++i)
{
int v1 = hexChr2Int(s.charAt(2*i));
int v2 = hexChr2Int(s.charAt(2*i+1));
if (v1 > 15 || v2 > 15) { return new byte[0];}
b[i] = (byte)(v1*16+v2);
}
return b;
}
static public String getLengthField(int len)
{
StringBuffer sb = new StringBuffer();
sb.append(new Integer(len).toString());
while (sb.length() < 10)
{
sb.append(" ");
}
return sb.toString();
}
}