separate common

This commit is contained in:
MaxKey
2021-02-15 09:57:52 +08:00
parent d1d8924b60
commit 647d899771
221 changed files with 5038 additions and 203 deletions

View File

@@ -14,93 +14,91 @@
* limitations under the License.
*/
package org.maxkey.crypto.cert;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
import java.security.SignatureException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.util.Date;
import org.junit.Test;
import sun.security.x509.AlgorithmId;
import sun.security.x509.CertificateAlgorithmId;
import sun.security.x509.CertificateIssuerName;
import sun.security.x509.CertificateSerialNumber;
import sun.security.x509.CertificateSubjectName;
import sun.security.x509.CertificateValidity;
import sun.security.x509.X500Name;
import sun.security.x509.X509CertImpl;
import sun.security.x509.X509CertInfo;
public class X509CertUtilsTest {
//@Test
public void test() throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, UnrecoverableKeyException, InvalidKeyException, NoSuchProviderException, SignatureException {
////
String keystoreFile = "c:\\keyStoreFile.jks";
String caAlias = "caAlias";
String certToSignAlias = "cert";
String newAlias = "newAlias";
char[] password = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };
char[] caPassword = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };
char[] certPassword = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g','h' };
FileInputStream input = new FileInputStream(keystoreFile);
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(input, password);
input.close();
PrivateKey caPrivateKey = (PrivateKey) keyStore.getKey(caAlias,caPassword);
java.security.cert.Certificate caCert = keyStore.getCertificate(caAlias);
byte[] encoded = caCert.getEncoded();
X509CertImpl caCertImpl = new X509CertImpl(encoded);
X509CertInfo caCertInfo = (X509CertInfo) caCertImpl.get(X509CertImpl.NAME + "." + X509CertImpl.INFO);
X500Name issuer = (X500Name) caCertInfo.get(X509CertInfo.SUBJECT + "."+ CertificateIssuerName.DN_NAME);
java.security.cert.Certificate cert = keyStore.getCertificate(certToSignAlias);
PrivateKey privateKey = (PrivateKey) keyStore.getKey(certToSignAlias,certPassword);
encoded = cert.getEncoded();
X509CertImpl certImpl = new X509CertImpl(encoded);
X509CertInfo certInfo = (X509CertInfo) certImpl.get(X509CertImpl.NAME+ "." + X509CertImpl.INFO);
Date firstDate = new Date();
Date lastDate = new Date(firstDate.getTime() + 365 * 24 * 60 * 60* 1000L);
CertificateValidity interval = new CertificateValidity(firstDate,lastDate);
certInfo.set(X509CertInfo.VALIDITY, interval);
certInfo.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber((int) (firstDate.getTime() / 1000)));
certInfo.set(X509CertInfo.ISSUER + "." + CertificateSubjectName.DN_NAME,issuer);
AlgorithmId algorithm = new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);
certInfo.set(CertificateAlgorithmId.NAME + "."+ CertificateAlgorithmId.ALGORITHM, algorithm);
X509CertImpl newCert = new X509CertImpl(certInfo);
newCert.sign(caPrivateKey, "MD5WithRSA");
keyStore.setKeyEntry(newAlias, privateKey, certPassword,new java.security.cert.Certificate[] { newCert });
FileOutputStream output = new FileOutputStream(keystoreFile);
keyStore.store(output, password);
output.close();
}
}
/*
* package org.maxkey.crypto.cert;
*
* import java.io.FileInputStream; import java.io.FileOutputStream; import
* java.io.IOException; import java.security.InvalidKeyException; import
* java.security.KeyStore; import java.security.KeyStoreException; import
* java.security.NoSuchAlgorithmException; import
* java.security.NoSuchProviderException; import java.security.PrivateKey;
* import java.security.SignatureException; import
* java.security.UnrecoverableKeyException; import
* java.security.cert.CertificateException; import java.util.Date;
*
* import org.junit.Test;
*
* import sun.security.x509.AlgorithmId; import
* sun.security.x509.CertificateAlgorithmId; import
* sun.security.x509.CertificateIssuerName; import
* sun.security.x509.CertificateSerialNumber; import
* sun.security.x509.CertificateSubjectName; import
* sun.security.x509.CertificateValidity; import sun.security.x509.X500Name;
* import sun.security.x509.X509CertImpl; import sun.security.x509.X509CertInfo;
*
* public class X509CertUtilsTest {
*
* //@Test public void test() throws KeyStoreException,
* NoSuchAlgorithmException, CertificateException, IOException,
* UnrecoverableKeyException, InvalidKeyException, NoSuchProviderException,
* SignatureException { ////
*
* String keystoreFile = "c:\\keyStoreFile.jks"; String caAlias = "caAlias";
* String certToSignAlias = "cert"; String newAlias = "newAlias";
*
* char[] password = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };
* char[] caPassword = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };
* char[] certPassword = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g','h' };
*
* FileInputStream input = new FileInputStream(keystoreFile); KeyStore keyStore
* = KeyStore.getInstance("JKS"); keyStore.load(input, password); input.close();
*
* PrivateKey caPrivateKey = (PrivateKey) keyStore.getKey(caAlias,caPassword);
* java.security.cert.Certificate caCert = keyStore.getCertificate(caAlias);
*
* byte[] encoded = caCert.getEncoded(); X509CertImpl caCertImpl = new
* X509CertImpl(encoded);
*
* X509CertInfo caCertInfo = (X509CertInfo) caCertImpl.get(X509CertImpl.NAME +
* "." + X509CertImpl.INFO);
*
* X500Name issuer = (X500Name) caCertInfo.get(X509CertInfo.SUBJECT + "."+
* CertificateIssuerName.DN_NAME);
*
* java.security.cert.Certificate cert =
* keyStore.getCertificate(certToSignAlias); PrivateKey privateKey =
* (PrivateKey) keyStore.getKey(certToSignAlias,certPassword); encoded =
* cert.getEncoded(); X509CertImpl certImpl = new X509CertImpl(encoded);
* X509CertInfo certInfo = (X509CertInfo) certImpl.get(X509CertImpl.NAME+ "." +
* X509CertImpl.INFO);
*
* Date firstDate = new Date(); Date lastDate = new Date(firstDate.getTime() +
* 365 * 24 * 60 * 60* 1000L); CertificateValidity interval = new
* CertificateValidity(firstDate,lastDate);
*
* certInfo.set(X509CertInfo.VALIDITY, interval);
*
* certInfo.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber((int)
* (firstDate.getTime() / 1000)));
*
* certInfo.set(X509CertInfo.ISSUER + "." +
* CertificateSubjectName.DN_NAME,issuer);
*
* AlgorithmId algorithm = new
* AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);
* certInfo.set(CertificateAlgorithmId.NAME + "."+
* CertificateAlgorithmId.ALGORITHM, algorithm); X509CertImpl newCert = new
* X509CertImpl(certInfo);
*
* newCert.sign(caPrivateKey, "MD5WithRSA");
*
* keyStore.setKeyEntry(newAlias, privateKey, certPassword,new
* java.security.cert.Certificate[] { newCert });
*
* FileOutputStream output = new FileOutputStream(keystoreFile);
* keyStore.store(output, password); output.close();
*
* }
*
* }
*/

View File

@@ -30,7 +30,7 @@ import org.maxkey.crypto.cert.X509V3CertGen;
public class X509V3CertGenTest {
@Test
//@Test
public void generateV3() throws Exception {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
KeyPair keyPair =X509V3CertGen.genRSAKeyPair();

View File

@@ -1,47 +0,0 @@
/*
* Copyright [2020] [MaxKey of copyright http://www.maxkey.top]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.maxkey.otp.algorithm;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import org.maxkey.crypto.Base32Utils;
import org.maxkey.crypto.password.opt.algorithm.HOTP;
import org.maxkey.crypto.password.opt.algorithm.HmacOTP;
public class HmacOTPTest {
public static void main(String[] args) {
byte[]byteseed= Base32Utils.decode("DCGAGPE2BCDBD6D3FG4NX2QGACVIHXP4");
System.out.println(HmacOTP.gen(Base32Utils.decode("DCGAGPE2BCDBD6D3FG4NX2QGACVIHXP4"),3,6));
try {
System.out.println(HOTP.generateOTP(byteseed, 3, 6, false, -1));
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

View File

@@ -1,47 +0,0 @@
/*
* Copyright [2020] [MaxKey of copyright http://www.maxkey.top]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.maxkey.otp.algorithm;
import java.io.File;
import org.maxkey.crypto.password.opt.algorithm.KeyUriFormat;
import org.maxkey.util.QRCode;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
public class KeyUriFormatTest {
public static void main(String[] args) {
try {
KeyUriFormat kuf=new KeyUriFormat(KeyUriFormat.Types.TOTP,
"GIWVWOL7EI5WLVZPDMROEPSTFBEVO77Q",
"connsec.com");
kuf.setPeriod(60);
String path = "D:\\totp.png";
BitMatrix byteMatrix;
byteMatrix = new MultiFormatWriter().encode(new String(kuf.format("shiming").getBytes("GBK"),"iso-8859-1"),
BarcodeFormat.QR_CODE, 300, 300);
File file = new File(path);
QRCode.writeToPath(byteMatrix, "png", file);
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@@ -1,76 +0,0 @@
/*
* Copyright [2020] [MaxKey of copyright http://www.maxkey.top]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.maxkey.otp.algorithm;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import org.apache.commons.codec.binary.Hex;
import org.maxkey.crypto.Base32Utils;
import org.maxkey.crypto.HexUtils;
import org.maxkey.crypto.password.opt.algorithm.TimeBasedOTP;
/**
* goole
* @author Crystal.Sea
*
*/
public class TimeBasedOTPTest {
public static void main(String[] args) {
//byte[]byteseed=OPTSecret.generate();
byte[]byteseed= Base32Utils.decode("DCGAGPE2BCDBD6D3FG4NX2QGACVIHXP4");//HexUtils.hex2Bytes( "a1270caecf007f2303cc9db12597a9694ff541aa");
String seed=Base32Utils.encode(byteseed);
String hexString=Hex.encodeHexString(byteseed);
//String hexString=HexUtils.bytes2HexString(byteseed);
System.out.println(hexString);
System.out.println(HexUtils.bytes2HexString(byteseed));
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
String utcTime = df.format(new Date());
Date curr=null;
try {
curr=df.parse(utcTime);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long currentTimeSeconds = curr.getTime() / 1000;
currentTimeSeconds =System.currentTimeMillis() / 1000;
int INTERVAL = 30;
System.out.println(utcTime);
//google time based
System.out.println(TimeBasedOTP.genOTP(hexString,Long.toHexString(currentTimeSeconds/INTERVAL).toUpperCase()+"","6"));
//google counter based
System.out.println(TimeBasedOTP.genOTP(hexString,3+"","6"));
}
}