CentOS上搭建Git服务器步骤详解

CentOS上搭建Git是大家非常常用的一个分布式版本控制软件了,比起svn像是要强大了许多了,下面一聚教程小编就为各位介绍一下在CentOS上搭建Git服务器步骤吧。
Git是一个分布式版本控制软件,原来是linux内核开发者Linus Torvalds为了更好地管理linux内核开发而创立的。发展至今,Git已经成为了一个相当好用的版本管理工具。相比于SVN,如果想要保存一些微小的修改也必须得提交服务器保存才可以,这样使服务器的版本号过多,而Git解决了这个问题,一些小的修改只在本地提交即可,只需最后修改完成后再提交服务器。正是由于这样的便捷性,现在越来越多的社区项目都开始使用Git来取代SVN之类较为传统的版本管理工具进行开发。
read more

Java加密技术 之 Java证书体系的实现(三)

接下来,我们使用第三方CA签名机构完成证书签名。
这里我们使用thawte提供的测试用21天免费ca证书。
1.要在该网站上注明你的域名,这里使用www.13com.org作为测试用域名(请勿使用该域名作为你的域名地址,该域名受法律保护!请使用其他非注册域名!)。
2.如果域名有效,你会收到邮件要求你访问https://www.thawte.com/cgi/server/try.exe获得ca证书。
3.复述密钥库的创建。

Shell代码

keytool -genkey -validity 36000 -alias www.13com.org -keyalg RSA -keystore d:13com.keystore

在这里我使用的密码为 123456

控制台输出:
Console代码
输入keystore密码:
再次输入新密码:
您的名字与姓氏是什么?
[Unknown]: www.13com.org
您的组织单位名称是什么?
[Unknown]: 13com
您的组织名称是什么?
[Unknown]: 13com
您所在的城市或区域名称是什么?
[Unknown]: BJ
您所在的州或省份名称是什么?
[Unknown]: BJ
该单位的两字母国家代码是什么
[Unknown]: CN
CN=www.13com.org, OU=13com, O=13com, L=BJ, ST=BJ, C=CN 正确吗?
[否]: Y

输入<tomcat>的主密码
(如果和 keystore 密码相同,按回车):
再次输入新密码:
4.通过如下命令,从13com.keystore中导出CA证书申请。

Shell代码
keytool -certreq -alias www.13com.org -file d:13com.csr -keystore d:13com.keystore -v
你会获得13com.csr文件,可以用记事本打开,内容如下格式:
Text代码
—–BEGIN NEW CERTIFICATE REQUEST—–
MIIBnDCCAQUCAQAwXDELMAkGA1UEBhMCQ04xCzAJBgNVBAgTAkJKMQswCQYDVQQHEwJCSjENMAsG
A1UEChMEemxleDENMAsGA1UECxMEemxleDEVMBMGA1UEAxMMd3d3LnpsZXgub3JnMIGfMA0GCSqG
SIb3DQEBAQUAA4GNADCBiQKBgQCR6DXU9Mp+mCKO7cv9JPsj0n1Ec/GpM09qvhpgX3FNad/ZWSDc
vU77YXZSoF9hQp3w1LC+eeKgd2MlVpXTvbVwBNVd2HiQPp37ic6BUUjSaX8LHtCl7l0BIEye9qQ2
j8G0kak7e8ZA0s7nb3Ymq/K8BV7v0MQIdhIc1bifK9ZDewIDAQABoAAwDQYJKoZIhvcNAQEFBQAD
gYEAMA1r2fbZPtNx37U9TRwadCH2TZZecwKJS/hskNm6ryPKIAp9APWwAyj8WJHRBz5SpZM4zmYO
oMCI8BcnY2A4JP+R7/SwXTdH/xcg7NVghd9A2SCgqMpF7KMfc5dE3iygdiPu+UhY200Dvpjx8gmJ
1UbH3+nqMUyCrZgURFslOUY=
—–END NEW CERTIFICATE REQUEST—–

5.将上述文件内容拷贝到https://www.thawte.com/cgi/server/try.exe中,点击next,获得回应内容,这里是p7b格式。
内容如下:
Text代码
—–BEGIN PKCS7—–
MIIF3AYJKoZIhvcNAQcCoIIFzTCCBckCAQExADALBgkqhkiG9w0BBwGgggWxMIID
EDCCAnmgAwIBAgIQA/mx/pKoaB+KGX2hveFU9zANBgkqhkiG9w0BAQUFADCBhzEL
MAkGA1UEBhMCWkExIjAgBgNVBAgTGUZPUiBURVNUSU5HIFBVUlBPU0VTIE9OTFkx
HTAbBgNVBAoTFFRoYXd0ZSBDZXJ0aWZpY2F0aW9uMRcwFQYDVQQLEw5URVNUIFRF
U1QgVEVTVDEcMBoGA1UEAxMTVGhhd3RlIFRlc3QgQ0EgUm9vdDAeFw0wOTA1Mjgw
MDIxMzlaFw0wOTA2MTgwMDIxMzlaMFwxCzAJBgNVBAYTAkNOMQswCQYDVQQIEwJC
SjELMAkGA1UEBxMCQkoxDTALBgNVBAoTBHpsZXgxDTALBgNVBAsTBHpsZXgxFTAT
BgNVBAMTDHd3dy56bGV4Lm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
keg11PTKfpgiju3L/ST7I9J9RHPxqTNPar4aYF9xTWnf2Vkg3L1O+2F2UqBfYUKd
8NSwvnnioHdjJVaV0721cATVXdh4kD6d+4nOgVFI0ml/Cx7Qpe5dASBMnvakNo/B
tJGpO3vGQNLO5292JqvyvAVe79DECHYSHNW4nyvWQ3sCAwEAAaOBpjCBozAMBgNV
HRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBABgNVHR8E
OTA3MDWgM6Axhi9odHRwOi8vY3JsLnRoYXd0ZS5jb20vVGhhd3RlUHJlbWl1bVNl
cnZlckNBLmNybDAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9v
Y3NwLnRoYXd0ZS5jb20wDQYJKoZIhvcNAQEFBQADgYEATPuxZbtJJSPmXvfrr1yz
xqM06IwTZ6UU0lZRG7I0WufMjNMKdpn8hklUhE17mxAhGSpewLVVeLR7uzBLFkuC
X7wMXxhoYdJZtNai72izU6Rd1oknao7diahvRxPK4IuQ7y2oZ511/4T4vgY6iRAj
q4q76HhPJrVRL/sduaiu+gYwggKZMIICAqADAgECAgEAMA0GCSqGSIb3DQEBBAUA
MIGHMQswCQYDVQQGEwJaQTEiMCAGA1UECBMZRk9SIFRFU1RJTkcgUFVSUE9TRVMg
T05MWTEdMBsGA1UEChMUVGhhd3RlIENlcnRpZmljYXRpb24xFzAVBgNVBAsTDlRF
U1QgVEVTVCBURVNUMRwwGgYDVQQDExNUaGF3dGUgVGVzdCBDQSBSb290MB4XDTk2
MDgwMTAwMDAwMFoXDTIwMTIzMTIxNTk1OVowgYcxCzAJBgNVBAYTAlpBMSIwIAYD
VQQIExlGT1IgVEVTVElORyBQVVJQT1NFUyBPTkxZMR0wGwYDVQQKExRUaGF3dGUg
Q2VydGlmaWNhdGlvbjEXMBUGA1UECxMOVEVTVCBURVNUIFRFU1QxHDAaBgNVBAMT
E1RoYXd0ZSBUZXN0IENBIFJvb3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
ALV9kG+Os6x/DOhm+tKUQfzVMWGhE95sFmEtkMMTX2Zi4n6i6BvzoReJ5njzt1LF
cqu4EUk9Ji20egKKfmqRzmQFLP7+1niSdfJEUE7cKY40QoI99270PTrLjJeaMcCl
+AYl+kD+RL5BtuKKU3PurYcsCsre6aTvjMcqpTJOGeSPAgMBAAGjEzARMA8GA1Ud
EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAgozj7BkD9O8si2V0v+EZ/t7E
fz/LC8y6mD7IBUziHy5/53ymGAGLtyhXHvX+UIE6UWbHro3IqVkrmY5uC93Z2Wew
A/6edK3KFUcUikrLeewM7gmqsiASEKx2mKRKlu12jXyNS5tXrPWRDvUKtFC1uL9a
12rFAQS2BkIk7aU+ghYxAA==
—–END PKCS7—–
将其存储为13com.p7b
6.将由CA签发的证书导入密钥库。

Shell代码
keytool -import -trustcacerts -alias www.13com.org -file d:13com.p7b -keystore d:13com.keystore -v
在这里我使用的密码为 123456

控制台输出:
Console代码
输入keystore密码:

回复中的最高级认证:

所有者:CN=Thawte Test CA Root, OU=TEST TEST TEST, O=Thawte Certification, ST=FOR
TESTING PURPOSES ONLY, C=ZA
签发人:CN=Thawte Test CA Root, OU=TEST TEST TEST, O=Thawte Certification, ST=FOR
TESTING PURPOSES ONLY, C=ZA
序列号:0
有效期: Thu Aug 01 08:00:00 CST 1996 至Fri Jan 01 05:59:59 CST 2021
证书指纹:
MD5:5E:E0:0E:1D:17:B7:CA:A5:7D:36:D6:02:DF:4D:26:A4
SHA1:39:C6:9D:27:AF:DC:EB:47:D6:33:36:6A:B2:05:F1:47:A9:B4:DA:EA
签名算法名称:MD5withRSA
版本: 3

扩展:

#1: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
CA:true
PathLen:2147483647
]

… 是不可信的。 还是要安装回复? [否]: Y
认证回复已安装在 keystore中
[正在存储 d:13com.keystore]
7.域名定位
将域名www.13com.org定位到本机上。打开C:WindowsSystem32driversetchosts文件,将www.13com.org绑定在本机上。在文件末尾追加127.0.0.1 www.13com.org。现在通过地址栏访问http://www.13com.org,或者通过ping命令,如果能够定位到本机,域名映射就搞定了。

8.配置server.xml
Xml代码
<Connector
keystoreFile=”conf/13com.keystore”
keystorePass=”123456″
truststoreFile=”conf/13com.keystore”
truststorePass=”123456″
SSLEnabled=”true”
URIEncoding=”UTF-8″
clientAuth=”false”
maxThreads=”150″
port=”443″
protocol=”HTTP/1.1″
scheme=”https”
secure=”true”
sslProtocol=”TLS” />
将文件13com.keystore拷贝到tomcat的conf目录下,重新启动tomcat。访问https://www.13com.org/,我们发现联网有些迟钝。大约5秒钟后,网页正常显示,同时有如下图所示:

浏览器验证了该CA机构的有效性。

打开证书,如下图所示:

调整测试类:
Java代码

import static org.junit.Assert.*; 
 
import java.io.DataInputStream; 
import java.io.InputStream; 
import java.net.URL; 
 
import javax.net.ssl.HttpsURLConnection; 
 
import org.junit.Test; 

public class CertificateCoderTest { 
 private String password = "123456"; 
 private String alias = "www.13com.org"; 
 private String certificatePath = "d:/13com.cer"; 
 private String keyStorePath = "d:/13com.keystore"; 
 
 @Test 
 public void test() throws Exception { 
 System.err.println("公钥加密——私钥解密"); 
 String inputStr = "Ceritifcate"; 
 byte[] data = inputStr.getBytes(); 
read more

Java加密技术 之 Java证书体系的实现(二)

我们需要构建一个由CA机构签发的有效证书,这里我们使用上文中生成的自签名证书13com.cer
这里,我们将证书导入到我们的密钥库。

Shell代码

keytool -import -alias www.13com.org -file d:/13com.cer -keystore d:/13com.keystore

其中
-import表示导入
-alias指定别名,这里是www.13com.org
-file指定算法,这里是d:/13com.cer
-keystore指定存储位置,这里是d:/13com.keystore
在这里我使用的密码为654321

控制台输出:
Console代码
输入keystore密码:
再次输入新密码:
所有者:CN=www.13com.org, OU=13com, O=13com, L=BJ, ST=BJ, C=CN
签发人:CN=www.13com.org, OU=13com, O=13com, L=BJ, ST=BJ, C=CN
序列号:4a1e48df
有效期: Thu May 28 16:18:39 CST 2009 至Wed Aug 26 16:18:39 CST 2009
证书指纹:
MD5:19:CA:E6:36:E2:DF:AD:96:31:97:2F:A9:AD:FC:37:6A
SHA1:49:88:30:59:29:45:F1:69:CA:97:A9:6D:8A:CF:08:D2:C3:D5:C0:C4
签名算法名称:SHA1withRSA
版本: 3
信任这个认证? [否]: y
认证已添加至keystore中
OK,最复杂的准备工作已经完成。
接下来我们将域名www.13com.org定位到本机上。打开C:WindowsSystem32driversetchosts文件,将www.13com.org绑定在本机上。在文件末尾追加127.0.0.1 www.13com.org。现在通过地址栏访问http://www.13com.org,或者通过ping命令,如果能够定位到本机,域名映射就搞定了。
现在,配置tomcat。先将13com.keystore拷贝到tomcat的conf目录下,然后配置server.xml。将如下内容加入配置文件
Xml代码
<Connector
SSLEnabled=”true”
URIEncoding=”UTF-8″
clientAuth=”false”
keystoreFile=”conf/13com.keystore”
keystorePass=”123456″
maxThreads=”150″
port=”443″
protocol=”HTTP/1.1″
scheme=”https”
secure=”true”
sslProtocol=”TLS” />

注意clientAuth=”false”测试阶段,置为false,正式使用时建议使用true。现在启动tomcat,访问https://www.13com.org/。
显然,证书未能通过认证,这个时候你可以选择安装证书(上文中的13com.cer文件就是证书),作为受信任的根证书颁发机构导入,再次重启浏览器(IE,其他浏览器对于域名www.13com.org不支持本地方式访问),访问https://www.13com.org/,你会看到地址栏中会有个小锁,就说明安装成功。所有的浏览器联网操作已经在RSA加密解密系统的保护之下了。但似乎我们感受不到。
这个时候很多人开始怀疑,如果我们要手工做一个这样的https的访问是不是需要把浏览器的这些个功能都实现呢?不需要!

接着上篇内容,给出如下代码实现:
Java代码

import java.io.FileInputStream; 
import java.security.KeyStore; 
import java.security.PrivateKey; 
import java.security.PublicKey; 
import java.security.Signature; 
import java.security.cert.Certificate; 
import java.security.cert.CertificateFactory; 
import java.security.cert.X509Certificate; 
import java.util.Date; 
 
import javax.crypto.Cipher; 
import javax.net.ssl.HttpsURLConnection; 
import javax.net.ssl.KeyManagerFactory; 
import javax.net.ssl.SSLContext; 
import javax.net.ssl.SSLSocketFactory; 
import javax.net.ssl.TrustManagerFactory; 
 
/** 
 * 证书组件 
*/ 
public abstract class CertificateCoder extends Coder { 
 
 /** 
 * Java密钥库(Java
read more

Java加密技术 之 Java证书体系的实现(一)

在构建Java代码实现前,我们需要完成证书的制作。
1.生成keyStroe文件
在命令行下执行以下命令:
Shell代码

keytool -genkey -validity 36000 -alias www.13com.org -keyalg RSA -keystore d:13com.keystore

其中
-genkey表示生成密钥
-validity指定证书有效期,这里是36000天
-alias指定别名,这里是www.13com.org
-keyalg指定算法,这里是RSA
-keystore指定存储位置,这里是d:13com.keystore

在这里我使用的密码为 123456

控制台输出:
Console代码 收藏代码
输入keystore密码:
再次输入新密码:
您的名字与姓氏是什么?
[Unknown]: www.13com.org
您的组织单位名称是什么?
[Unknown]: 13com
您的组织名称是什么?
[Unknown]: 13com
您所在的城市或区域名称是什么?
[Unknown]: BJ
您所在的州或省份名称是什么?
[Unknown]: BJ
该单位的两字母国家代码是什么
[Unknown]: CN
CN=www.13com.org, OU=13com, O=13com, L=BJ, ST=BJ, C=CN 正确吗?
[否]: Y

输入<tomcat>的主密码
(如果和 keystore 密码相同,按回车):
再次输入新密码:

这时,在D盘下会生成一个13com.keystore的文件。

2.生成自签名证书
光有keyStore文件是不够的,还需要证书文件,证书才是直接提供给外界使用的公钥凭证。
导出证书:
Shell代码 收藏代码
keytool -export -keystore d:13com.keystore -alias www.13com.org -file d:13com.cer -rfc
其中
-export指定为导出操作
-keystore指定keystore文件
-alias指定导出keystore文件中的别名
-file指向导出路径
-rfc以文本格式输出,也就是以BASE64编码输出
这里的密码是 123456

控制台输出:
Console代码 收藏代码
输入keystore密码:
保存在文件中的认证 <d:13com.cer>
当然,使用方是需要导入证书的!
可以通过自签名证书完成CAS单点登录系统的构建!

Ok,准备工作完成,开始Java实现!

通过java代码实现如下:
Java代码

import java.io.FileInputStream; 
import java.security.KeyStore; 
import java.security.PrivateKey; 
import java.security.PublicKey; 
import java.security.Signature; 
import java.security.cert.Certificate; 
import java.security.cert.CertificateFactory; 
import java.security.cert.X509Certificate; 
import java.util.Date;
import javax.crypto.Cipher;
/** 
* 证书组件 
*/ 
public abstract class CertificateCoder extends Coder {

/** 
* Java密钥库(Java Key Store,JKS)KEY_STORE 
*/ 
public static final String KEY_STORE = "JKS";
public static final String X509 = "X.509";
/** 
* 由KeyStore获得私钥 
* 
* @param keyStorePath
read more

Java加密技术 之 ECC

ECC
ECC-Elliptic Curves Cryptography,椭圆曲线密码编码学,是目前已知的公钥体制中,对每比特所提供加密强度最高的一种体制。在软件注册保护方面起到很大的作用,一般的序列号通常由该算法产生。
当我开始整理《Java加密技术(二)》的时候,我就已经在开始研究ECC了,但是关于Java实现ECC算法的资料实在是太少了,无论是国内还是国外的资料,无论是官方还是非官方的解释,最终只有一种答案——ECC算法在jdk1.5后加入支持,目前仅仅只能完成密钥的生成与解析。 如果想要获得ECC算法实现,需要调用硬件完成加密/解密(ECC算法相当耗费资源,如果单纯使用CPU进行加密/解密,效率低下),涉及到Java Card领域,PKCS#11。 其实,PKCS#11配置很简单,但缺乏硬件设备,无法尝试!

尽管如此,我照旧提供相应的Java实现代码,以供大家参考。

通过java代码实现如下:
Java代码

import java.math.BigInteger; 
import java.security.Key; 
import java.security.KeyFactory; 
import java.security.interfaces.ECPrivateKey; 
import java.security.interfaces.ECPublicKey; 
import java.security.spec.ECFieldF2m; 
import java.security.spec.ECParameterSpec; 
import java.security.spec.ECPoint; 
import java.security.spec.ECPrivateKeySpec; 
import java.security.spec.ECPublicKeySpec; 
import java.security.spec.EllipticCurve; 
import java.security.spec.PKCS8EncodedKeySpec; 
import java.security.spec.X509EncodedKeySpec; 
import java.util.HashMap; 
import java.util.Map; 
 
import javax.crypto.Cipher; 
import javax.crypto.NullCipher; 
 
import sun.security.ec.ECKeyFactory; 
import sun.security.ec.ECPrivateKeyImpl; 
import sun.security.ec.ECPublicKeyImpl;
read more

Java加密技术 之 DSA

DSA
DSA-Digital Signature Algorithm 是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名。私钥加密生成数字签名,公钥验证数据及签名。如果数据和签名不匹配则认为验证失败!数字签名的作用就是校验数据在传输过程中不被修改。数字签名,是单向加密的升级!
通过java代码实现如下:
Java代码

import java.security.Key; 
import java.security.KeyFactory; 
import java.security.KeyPair; 
import java.security.KeyPairGenerator; 
import java.security.PrivateKey; 
import java.security.PublicKey; 
import java.security.SecureRandom; 
import java.security.Signature; 
import java.security.interfaces.DSAPrivateKey; 
import java.security.interfaces.DSAPublicKey; 
import java.security.spec.PKCS8EncodedKeySpec; 
import java.security.spec.X509EncodedKeySpec; 
import java.util.HashMap; 
import java.util.Map; 
 
/** 
 * DSA安全编码组件 
*/ 
public abstract class DSACoder extends Coder { 
 
 public static final String ALGORITHM = "DSA"; 
 
 /** 
 * 默认密钥字节数 
 * 
 * <pre> 
 * DSA 
 * Default Keysize 1024
read more

Java加密技术 之 BASE64

如基本的单向加密算法:

BASE64 严格地说,属于编码格式,而非加密算法
MD5(Message Digest algorithm 5,信息摘要算法)
SHA(Secure Hash Algorithm,安全散列算法)
HMAC(Hash Message Authentication Code,散列消息鉴别码)

复杂的对称加密(DES、PBE)、非对称加密算法:

DES(Data Encryption Standard,数据加密算法)
PBE(Password-based encryption,基于密码验证)
RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)
DH(Diffie-Hellman算法,密钥一致协议)
DSA(Digital Signature Algorithm,数字签名)
ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)

本篇内容简要介绍BASE64、MD5、SHA、HMAC几种方法。
MD5、SHA、HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法。我们通常只把他们作为加密的基础。单纯的以上三种的加密并不可靠。

BASE64
按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
常见于邮件、http加密,截取http信息,你就会发现登录操作的用户名、密码字段通过BASE64加密的。

通过java代码实现如下:
Java代码

/**
 * BASE64解密
 *
 * @param key
 * @return
 * @throws Exception
 */
 public static byte[] decryptBASE64(String key) throws Exception {
 return (new BASE64Decoder()).decodeBuffer(key);
 }
/**
 * BASE64加密
 *
 * @param key
 * @return
 * @throws Exception
 */
 public static String encryptBASE64(byte[] key) throws Exception {
 return (new BASE64Encoder()).encodeBuffer(key);
 }

主要就是BASE64Encoder、BASE64Decoder两个类,我们只需要知道使用对应的方法即可。另,BASE加密后产生的字节位数是8的倍数,如果不够位数以=符号填充。

MD5
MD5 — message-digest algorithm 5 (信息-摘要算法)缩写,广泛用于加密和解密技术,常用于文件校验。校验?不管文件多大,经过MD5后都能生成唯一的MD5值。好比现在的ISO校验,都是MD5校验。怎么用?当然是把ISO经过MD5后产生MD5的值。一般下载linux-ISO的朋友都见过下载链接旁边放着MD5的串。就是用来验证文件是否一致的。

通过java代码实现如下:
Java代码

/** 
 * MD5加密 
 * 
 * @param data 
 * @return 
 * @throws Exception 
 */ 
public static byte[] encryptMD5(byte[] data) throws Exception { 
 
 MessageDigest md5 = MessageDigest.getInstance(KEY_MD5); 
 md5.update(data); 
 
 return md5.digest(); 
 
}

通常我们不直接使用上述MD5加密。通常将MD5产生的字节数组交给BASE64再加密一把,得到相应的字符串。

SHA
SHA(Secure Hash Algorithm,安全散列算法),数字签名等密码学应用中重要的工具,被广泛地应用于电子商务等信息安全领域。虽然,SHA与MD5通过碰撞法都被破解了, 但是SHA仍然是公认的安全加密算法,较之MD5更为安全。

通过java代码实现如下:
Java代码

/** 
 * SHA加密 
 * 
 * @param data 
 * @return 
 * @throws Exception 
 */ 
 public static
read more

Java加密技术 之 DES

DES
DES-Data Encryption Standard,即数据加密算法。是IBM公司于1975年研究成功并公开发表的。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位。

通过java代码实现如下:
Java代码

import java.security.Key; 
import java.security.SecureRandom; 
 
import javax.crypto.Cipher; 
import javax.crypto.KeyGenerator; 
import javax.crypto.SecretKey; 
import javax.crypto.SecretKeyFactory; 
import javax.crypto.spec.DESKeySpec; 
 
 
/** 
 * DES安全编码组件 
 * 
 * <pre> 
 * 支持 DES、DESede(TripleDES,就是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR) 
 * DES key size must be equal to 56 
 * DESede(TripleDES) key size must be equal to 112 or 168 
 * AES key size must be equal to 128, 192 or 256,but 192 and 256 bits may not be available 
 * Blowfish key size must be multiple of 8, and can only range from 32 to 448 (inclusive) 
 * RC2 key size must be between 40 and 1024 bits 
 * RC4(ARCFOUR) key size must be between
read more

Java加密技术 之 PBE

PBE
PBE——Password-based encryption(基于密码加密)。其特点在于口令由用户自己掌管,不借助任何物理媒体;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。是一种简便的加密方式。

通过java代码实现如下:
Java代码

import java.security.Key; 
import java.util.Random; 
 
import javax.crypto.Cipher; 
import javax.crypto.SecretKey; 
import javax.crypto.SecretKeyFactory; 
import javax.crypto.spec.PBEKeySpec; 
import javax.crypto.spec.PBEParameterSpec; 
 
/** 
 * PBE安全编码组件 
 */ 
public abstract class PBECoder extends Coder { 
 /** 
 * 支持以下任意一种算法 
 * 
 * <pre> 
 * PBEWithMD5AndDES 
 * PBEWithMD5AndTripleDES 
 * PBEWithSHA1AndDESede 
 * PBEWithSHA1AndRC2_40 
 * </pre> 
 */ 
 public static final String ALGORITHM = "PBEWITHMD5andDES"; 
 
 /** 
 * 盐初始化 
 * 
 * @return 
 * @throws Exception 
 */ 
 public static byte[] initSalt() throws Exception { 
 byte[] salt = new byte[8]; 
 Random
read more

Java加密技术 之 RSA

RSA
这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。
这种加密算法的特点主要是密钥的变化,上文我们看到DES只有一个密钥。相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了。RSA同时有两把钥匙,公钥与私钥。同时支持数字签名。数字签名的意义在于,对传输过来的数据进行校验。确保数据在传输工程中不被修改。

流程分析:
甲方构建密钥对儿,将公钥公布给乙方,将私钥保留。
甲方使用私钥加密数据,然后用私钥对加密后的数据签名,发送给乙方签名以及加密后的数据;乙方使用公钥、签名来验证待解密数据是否有效,如果有效使用公钥对数据解密。
乙方使用公钥加密数据,向甲方发送经过加密后的数据;甲方获得加密数据,通过私钥解密。

按如上步骤给出序列图,如下:

通过java代码实现如下:
Java代码

import java.security.Key; 
import java.security.KeyFactory; 
import java.security.KeyPair; 
import java.security.KeyPairGenerator; 
import java.security.PrivateKey; 
import java.security.PublicKey; 
import java.security.Signature; 
import java.security.interfaces.RSAPrivateKey; 
import java.security.interfaces.RSAPublicKey; 
import java.security.spec.PKCS8EncodedKeySpec; 
import java.security.spec.X509EncodedKeySpec; 
 
import java.util.HashMap; 
import java.util.Map; 
 
import javax.crypto.Cipher; 
 
/** 
 * RSA安全编码组件 
 */ 
public abstract class RSACoder extends Coder { 
 public static final String KEY_ALGORITHM = "RSA"; 
 public static final String SIGNATURE_ALGORITHM = "MD5withRSA"; 
 
 private
read more