mirror of
https://gitee.com/dromara/MaxKey.git
synced 2026-05-20 09:38:10 +08:00
separate common
This commit is contained in:
@@ -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();
|
||||
*
|
||||
* }
|
||||
*
|
||||
* }
|
||||
*/
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"));
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user