sql server 字符串转成日期格式

SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的。本文我们主要就介绍一下SQL Server日期时间转字符串的相关知识,接下来就让我们一起来了解一下这部分内容。

字符串转日期时间:

convert(datetime,列名)

日期时间转字符串:

  1. Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM   
  2. Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06   
  3. Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16   
  4. Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06   
  5. Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06   
  6. Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06   
  7. Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06   
  8. Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06   
  9. Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46   
  10. Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM   
  11. Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06   
  12. Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16   
  13. Select CONVERT(varchar(100), GETDATE(), 12): 060516   
  14. Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937   
  15. Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967   
  16. Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47   
  17. Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157   
  18. Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM   
  19. Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16   
  20. Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47   
  21. Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250   
  22. Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM   
  23. Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006   
  24. Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16   
  25. Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006   
  26. Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006   
  27. Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006   
  28. Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006   
  29. Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006   
  30. Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49   
  31. Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM   
  32. Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006   
  33. Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16   
  34. Select CONVERT(varchar(100), GETDATE(), 112): 20060516   
  35. Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513   
  36. Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547   
  37. Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49   
  38. Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700   
  39. Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827   
  40. Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM  

在SQL数据库中,有一类函数是不得不提的,那就是SQL Server日期时间函数,这是SQL Server处理日期和时间最常用的函数,下面就将为介绍这类函数。

Sql Server日期与时间函数:

1.  当前系统日期、时间 

select getdate() 

2. dateadd  在向指定日期加上一段时间的基础上,返回新的 datetime 值

例如:向日期加上2天 

select dateadd(day,2,’2004-10-15′)  –返回:2004-10-17 00:00:00.000

3. datediff 返回跨两个指定日期的日期和时间边界数。

select datediff(day,’2004-09-01′,’2004-09-18′)   –返回:17

4. datepart 返回代表指定日期的指定日期部分的整数。

SELECT DATEPART(month, ‘2004-10-15′)  –返回 10

5. datename 返回代表指定日期的指定日期部分的字符串

SELECT datename(weekday, ‘2004-10-15′)  –返回:星期五

6. day(), month(),year() –可以与datepart对照一下

select 当前日期=convert(varchar(10),getdate(),120) ,当前时间=convert(varchar(8),getdate(),114)

select datename(dw,’2004-10-15′)

select 本年第多少周=datename(week,’2004-10-15′),今天是周几=datename(weekday,’2004-10-15′)

SQL Server日期函数     参数/功能

GetDate( )    返回系统目前的日期与时间

DateDiff (interval,date1,date2)   以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1

DateAdd (interval,number,date)   以interval指定的方式,加上number之后的日期

DatePart (interval,date)    返回日期date中,interval指定部分所对应的整数值

DateName (interval,date)   返回日期date中,interval指定部分所对应的字符串名称

参数interval的设定值如下:

值缩写(Sql Server) (Access 和 ASP) 说明

Year Yy yyyy 年 1753 ~ 9999

Quarter Qq q   季 1 ~ 4

Month Mm m   月1 ~ 12

Day of year Dy y  一年的日数,一年中的第几日 1-366

Day Dd d   日,1-31

Weekday Dw w 一周的日数,一周中的第几日 1-7

Week Wk ww  周,一年中的第几周 0 ~ 51

Hour Hh h   时0 ~ 23

Minute Mi n  分钟0 ~ 59

Second Ss s 秒 0 ~ 59

Millisecond Ms – 毫秒 0 ~ 999

Access 和Asp中用date()和now()取得系统日期时间;其中DateDiff,DateAdd,DatePart也同是能用于Access和asp中,这些函数的用法也类似。

SQL Server日期函数举例:

1.GetDate() 用于sql server :select GetDate()

2.DateDiff(‘s’,’2005-07-20′,’2005-7-25 22:56:32′)返回值为 514592 秒

DateDiff(‘d’,’2005-07-20′,’2005-7-25 22:56:32′)返回值为 5 天

3.DatePart(‘w’,’2005-7-25 22:56:32′)返回值为 2 即星期一(周日为1,周六为7)

DatePart(‘d’,’2005-7-25 22:56:32′)返回值为 25即25号

DatePart(‘y’,’2005-7-25 22:56:32′)返回值为 206即这一年中第206天

DatePart(‘yyyy’,’2005-7-25 22:56:32′)返回值为 2005即2005年

关于SQL Server日期时间格式转换字符串的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!

JAVA上加密算法的实现用例

来源:www.ibm.com
关于作者王辉 ddxxkk@21cn.com
王辉,具有八年的编程及系统管理经验,所使用的语言为C和Java 编程语言。目前在深圳一家公司做程序员,使用C和JAVA为DB2数据库编程.可通过 ddxxkk@21cn.com 联系。 

第1章 基础知识

 
1.1. 单钥密码体制 
  单钥密码体制是一种传统的加密算法,是指信息的发送方和接收方共同使用同一把密钥进行加解密。
  通常,使用的加密算法 比较简便高效,密钥简短,加解密速度快,破译极其困难。但是加密的安全性依靠密钥保管的安全性,在公开的计算机网络上安全地传送和保管密钥是一个严峻的问 题,并且如果在多用户的情况下密钥的保管安全性也是一个问题。
  单钥密码体制的代表是美国的DES

 1.2. 消息摘要 
  一个消息摘要就是一个数据块的数字指纹。即对一个任意长度的一个数据块进行计算,产生一个唯一指印(对于SHA1是产生一个20字节的二进制数组)。
  消息摘要有两个基本属性: 
  两个不同的报文难以生成相同的摘要 
  难以对指定的摘要生成一个报文,而由该报文反推算出该指定的摘要
  代表:美国国家标准技术研究所的SHA1和麻省理工学院Ronald Rivest提出的MD5

 1.3. Diffie-Hellman密钥一致协议 
  密钥一致协议是由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想。
  先决条件,允许两名用户在公开媒体上交换信息以生成”一致”的,可以共享的密钥
  代表:指数密钥一致协议(Exponential Key Agreement Protocol)

 1.4. 非对称算法与公钥体系 
  1976年,Dittie和Hellman为解决密钥管理问题,在他们的奠基性的工作”密码学的新方向”一文中,提出一种密钥交换协议,允许在不安全的媒 体上通过通讯双方交换信息,安全地传送秘密密钥。在此新思想的基础上,很快出现了非对称密钥密码体制,即公钥密码体制。在公钥体制中,加密密钥不同于解密 密钥,加密密钥公之于众,谁都可以使用;解密密钥只有解密人自己知道。它们分别称为公开密钥(Public key)和秘密密钥(Private key)。 
  迄今为止的所有公钥密码体系中,RSA系统是最著名、最多使用的一种。RSA公开密钥密码系统是由R.Rivest、A.Shamir和 L.Adleman俊教授于1977年提出的。RSA的取名就是来自于这三位发明者的姓的第一个字母

 1.5. 数字签名 
  所谓数字签名就是信息发送者用其私钥对从所传报文中提取出的特征数据(或称数字指纹)进行RSA算法操作,以保证发信人无法抵赖曾发过该信息(即不可抵赖 性),同时也确保信息报文在经签名后末被篡改(即完整性)。当信息接收者收到报文后,就可以用发送者的公钥对数字签名进行验证。  
  在数字签名中有重要作用的数字指纹是通过一类特殊的散列函数(HASH函数)生成的,对这些HASH函数的特殊要求是: 

  接受的输入报文数据没有长度限制; 
  对任何输入报文数据生成固定长度的摘要(数字指纹)输出 
  从报文能方便地算出摘要; 
  难以对指定的摘要生成一个报文,而由该报文反推算出该指定的摘要; 
  两个不同的报文难以生成相同的摘要
  代表:DSA

第2章 在JAVA中的实现

 2.1. 相关 
  Diffie-Hellman密钥一致协议和DES程序需要JCE工具库的支持,可以到 http://java.sun.com/security/index.html 下载JCE,并进行安装。简易安装把 jce1.2.1lib 下的所有内容复制到 %java_home%libext下,如果没有ext目录自行建立,再把jce1_2_1.jar和sunjce_provider.jar添加到 CLASSPATH内,更详细说明请看相应用户手册

 2.2. 消息摘要MD5和SHA的使用 
 
使用方法:
  首先用生成一个MessageDigest类,确定计算方法
  java.security.MessageDigest alga=java.security.MessageDigest.getInstance(“SHA-1″);

  添加要进行计算摘要的信息

alga.update(myinfo.getBytes());

  计算出摘要

byte[] digesta=alga.digest();

  发送给其他人你的信息和摘要

其他人用相同的方法初始化,添加信息,最后进行比较摘要是否相同

algb.isEqual(digesta,algb.digest())

  相关AIP

java.security.MessageDigest 类

static getInstance(String algorithm)

返回一个MessageDigest对象,它实现指定的算法

  参数:算法名,如 SHA-1 或MD5

void update (byte input)

void update (byte[] input)

void update(byte[] input, int offset, int len)

  添加要进行计算摘要的信息

byte[] digest()

  完成计算,返回计算得到的摘要(对于MD5是16位,SHA是20位)

void reset()

  复位

static boolean isEqual(byte[] digesta, byte[] digestb)

比效两个摘要是否相同

代码: 
import java.security.*;
public class myDigest {
public static void main(String[] args) {

myDigest my=new myDigest();
my.testDigest();

}
public void testDigest()
{
try {
String myinfo=”我的测试信息”;

//java.security.MessageDigest alg=java.security.MessageDigest.getInstance(“MD5″);
java.security.MessageDigest alga=java.security.MessageDigest.getInstance(“SHA-1″);
alga.update(myinfo.getBytes());
byte[] digesta=alga.digest();
System.out.println(“本信息摘要是:”+byte2hex(digesta));
//通过某中方式传给其他人你的信息(myinfo)和摘要(digesta) 对方可以判断是否更改或传输正常
java.security.MessageDigest algb=java.security.MessageDigest.getInstance(“SHA-1″);
algb.update(myinfo.getBytes());
if (algb.isEqual(digesta,algb.digest())) {
System.out.println(“信息检查正常”);
}
else
{
System.out.println(“摘要不相同”);
}

}
catch (java.security.NoSuchAlgorithmException ex) {
System.out.println(“非法摘要算法”);
}

}
public String byte2hex(byte[] b) //二行制转字符串
{
String hs=””;
String stmp=””;
for (int n=0;n {
stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+”0″+stmp;
else hs=hs+stmp;
if (n }
return hs.toUpperCase();
}

}

2.3. 数字签名DSA

对于一个用户来讲首先要生成他的密钥对,并且分别保存 
生成一个KeyPairGenerator实例 
java.security.KeyPairGenerator keygen=java.security.KeyPairGenerator.getInstance(“DSA”);
如果设定随机产生器就用如相代码初始化
SecureRandom secrand=new SecureRandom(); 

secrand.setSeed(“tttt”.getBytes()); //初始化随机产生器
keygen.initialize(512,secrand); //初始化密钥生成器
否则
keygen.initialize(512);
生成密钥公钥pubkey和私钥prikey
KeyPair keys=keygen.generateKeyPair(); //生成密钥组
PublicKey pubkey=keys.getPublic();
PrivateKey prikey=keys.getPrivate();
分别保存在myprikey.dat和mypubkey.dat中,以便下次不在生成
(生成密钥对的时间比较长
java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new java.io.FileOutputStream(“myprikey.dat”));
out.writeObject(prikey);
out.close();
out=new java.io.ObjectOutputStream(new java.io.FileOutputStream(“mypubkey.dat”));
out.writeObject(pubkey);
out.close();

用他私人密钥(prikey)对他所确认的信息(info)进行数字签名产生一个签名数组 
  从文件中读入私人密钥(prikey) 
java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.FileInputStream(“myprikey.dat”));
PrivateKey myprikey=(PrivateKey)in.readObject();
in.close();
  初始一个Signature对象,并用私钥对信息签名
java.security.Signature signet=java.security.Signature.getInstance(“DSA”);
signet.initSign(myprikey);
signet.update(myinfo.getBytes());
byte[] signed=signet.sign();
  把信息和签名保存在一个文件中(myinfo.dat)
java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new java.io.FileOutputStream(“myinfo.dat”));
out.writeObject(myinfo);
out.writeObject(signed);
out.close();
  把他的公钥的信息及签名发给其它用户

其他用户用他的公共密钥(pubkey)和签名(signed)和信息(info)进行验证是否由他签名的信息 
  读入公钥
java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.FileInputStream(“mypubkey.dat”)); 
PublicKey pubkey=(PublicKey)in.readObject(); 
in.close();

  读入签名和信息
in=new java.io.ObjectInputStream(new java.io.FileInputStream(“myinfo.dat”)); 
String info=(String)in.readObject(); 
byte[] signed=(byte[])in.readObject(); 
in.close();

  初始一个Signature对象,并用公钥和签名进行验证
java.security.Signature signetcheck=java.security.Signature.getInstance(“DSA”); 
signetcheck.initVerify(pubkey); 
signetcheck.update(info.getBytes()); 
if (signetcheck.verify(signed)) { System.out.println(“签名正常”);}

  对于密钥的保存本文是用对象流的方式保存和传送的,也可可以用编码的方式保存.注意要
import java.security.spec.* 
import java.security.*

具休说明如下

public key是用X.509编码的,例码如下: 
byte[] bobEncodedPubKey=mypublic.getEncoded(); //生成编码
//传送二进制编码
//以下代码转换编码为相应key对象
X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(bobEncodedPubKey);
KeyFactory keyFactory = KeyFactory.getInstance(“DSA”);
PublicKey bobPubKey = keyFactory.generatePublic(bobPubKeySpec);

对于Private key是用PKCS#8编码,例码如下: 
byte[] bPKCS=myprikey.getEncoded();
//传送二进制编码
//以下代码转换编码为相应key对象
PKCS8EncodedKeySpec priPKCS8=new PKCS8EncodedKeySpec(bPKCS);
KeyFactory keyf=KeyFactory.getInstance(“DSA”);
PrivateKey otherprikey=keyf.generatePrivate(priPKCS8);

  常用API 
java.security.KeyPairGenerator 密钥生成器类 
public static KeyPairGenerator getInstance(String algorithm) throws NoSuchAlgorithmException 
以指定的算法返回一个KeyPairGenerator 对象 
参数: algorithm 算法名.如:”DSA”,”RSA”

public void initialize(int keysize)

以指定的长度初始化KeyPairGenerator对象,如果没有初始化系统以1024长度默认设置

参数:keysize 算法位长.其范围必须在 512 到 1024 之间,且必须为 64 的倍数

public void initialize(int keysize, SecureRandom random)
以指定的长度初始化和随机发生器初始化KeyPairGenerator对象
参数:keysize 算法位长.其范围必须在 512 到 1024 之间,且必须为 64 的倍数
random 一个随机位的来源(对于initialize(int keysize)使用了默认随机器

public abstract KeyPair generateKeyPair()
产生新密钥对

java.security.KeyPair 密钥对类
public PrivateKey getPrivate()
返回私钥

public PublicKey getPublic()
返回公钥

java.security.Signature 签名类
public static Signature getInstance(String algorithm) throws NoSuchAlgorithmException
返回一个指定算法的Signature对象
参数 algorithm 如:”DSA”

public final void initSign(PrivateKey privateKey)
throws InvalidKeyException
用指定的私钥初始化
参数rivateKey 所进行签名时用的私钥

public final void update(byte data)
throws SignatureException
public final void update(byte[] data)
throws SignatureException
public final void update(byte[] data, int off, int len)
throws SignatureException 

添加要签名的信息

public final byte[] sign()
throws SignatureException
返回签名的数组,前提是initSign和update

public final void initVerify(PublicKey publicKey)
throws InvalidKeyException
用指定的公钥初始化
参数ublicKey 验证时用的公钥

public final boolean verify(byte[] signature)
throws SignatureException
验证签名是否有效,前提是已经initVerify初始化
参数: signature 签名数组 
*/
import java.security.*;
import java.security.spec.*;
public class testdsa {
public static void main(String[] args) throws java.security.NoSuchAlgorithmException,java.lang.Exception {
testdsa my=new testdsa();
my.run();
}
public void run()
{

//数字签名生成密钥
//第一步生成密钥对,如果已经生成过,本过程就可以跳过,对用户来讲myprikey.dat要保存在本地
//而mypubkey.dat给发布给其它用户
if ((new java.io.File(“myprikey.dat”)).exists()==false) {
if (generatekey()==false) {
System.out.println(“生成密钥对败”);
return;
};
}
//第二步,此用户
//从文件中读入私钥,对一个字符串进行签名后保存在一个文件(myinfo.dat)中
//并且再把myinfo.dat发送出去
//为了方便数字签名也放进了myifno.dat文件中,当然也可分别发送
try {
java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.FileInputStream(“myprikey.dat”));
PrivateKey myprikey=(PrivateKey)in.readObject();
in.close();

// java.security.spec.X509EncodedKeySpec pubX509=new java.security.spec.X509EncodedKeySpec(bX509);

//java.security.spec.X509EncodedKeySpec pubkeyEncode=java.security.spec.X509EncodedKeySpec
String myinfo=”这是我的信息”; //要签名的信息
//用私钥对信息生成数字签名
java.security.Signature signet=java.security.Signature.getInstance(“DSA”);
signet.initSign(myprikey);
signet.update(myinfo.getBytes());
byte[] signed=signet.sign(); //对信息的数字签名
System.out.println(“signed(签名内容)=”+byte2hex(signed));
//把信息和数字签名保存在一个文件中
java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new java.io.FileOutputStream(“myinfo.dat”));
out.writeObject(myinfo);
out.writeObject(signed);
out.close();
System.out.println(“签名并生成文件成功”);
}
catch (java.lang.Exception e) {
e.printStackTrace();
System.out.println(“签名并生成文件失败”);
};

//第三步
//其他人通过公共方式得到此户的公钥和文件
//其他人用此户的公钥,对文件进行检查,如果成功说明是此用户发布的信息.
//
try {

java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.FileInputStream(“mypubkey.dat”));
PublicKey pubkey=(PublicKey)in.readObject();
in.close();
System.out.println(pubkey.getFormat());

in=new java.io.ObjectInputStream(new java.io.FileInputStream(“myinfo.dat”));
String info=(String)in.readObject();
byte[] signed=(byte[])in.readObject();
in.close();

java.security.Signature signetcheck=java.security.Signature.getInstance(“DSA”);
signetcheck.initVerify(pubkey);
signetcheck.update(info.getBytes());
if (signetcheck.verify(signed)) {
System.out.println(“info=”+info);
System.out.println(“签名正常”);
}
else System.out.println(“非签名正常”);
}
catch (java.lang.Exception e) {e.printStackTrace();};

}

//生成一对文件myprikey.dat和mypubkey.dat—私钥和公钥,
//公钥要用户发送(文件,网络等方法)给其它用户,私钥保存在本地
public boolean generatekey()
{
try {
java.security.KeyPairGenerator keygen=java.security.KeyPairGenerator.getInstance(“DSA”);
// SecureRandom secrand=new SecureRandom();
// secrand.setSeed(“tttt”.getBytes()); //初始化随机产生器
// keygen.initialize(576,secrand); //初始化密钥生成器
keygen.initialize(512);
KeyPair keys=keygen.genKeyPair();
// KeyPair keys=keygen.generateKeyPair(); //生成密钥组
PublicKey pubkey=keys.getPublic();
PrivateKey prikey=keys.getPrivate();

java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new java.io.FileOutputStream(“myprikey.dat”));
out.writeObject(prikey);
out.close();
System.out.println(“写入对象 prikeys ok”);
out=new java.io.ObjectOutputStream(new java.io.FileOutputStream(“mypubkey.dat”));
out.writeObject(pubkey);
out.close();
System.out.println(“写入对象 pubkeys ok”);
System.out.println(“生成密钥对成功”);
return true;
}
catch (java.lang.Exception e) {
e.printStackTrace();
System.out.println(“生成密钥对失败”);

return false;
};

}

public String byte2hex(byte[] b)
{
String hs=””;
String stmp=””;
for (int n=0;n {
stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+”0″+stmp;
else hs=hs+stmp;
if (n }
return hs.toUpperCase();
}

}

 2.4. DESede/DES对称算法  
  首先生成密钥,并保存(这里并没的保存的代码,可参考DSA中的方法)

KeyGenerator keygen = KeyGenerator.getInstance(Algorithm);

SecretKey deskey = keygen.generateKey();

用密钥加密明文(myinfo),生成密文(cipherByte)

Cipher c1 = Cipher.getInstance(Algorithm);

c1.init(Cipher.ENCRYPT_MODE,deskey);

byte[] cipherByte=c1.doFinal(myinfo.getBytes());

传送密文和密钥,本文没有相应代码可参考DSA

………….

  用密钥解密密文

c1 = Cipher.getInstance(Algorithm);

c1.init(Cipher.DECRYPT_MODE,deskey);

byte[] clearByte=c1.doFinal(cipherByte);

相对来说对称密钥的使用是很简单的,对于JCE来讲支技DES,DESede,Blowfish三种加密术

对于密钥的保存各传送可使用对象流或者用二进制编码,相关参考代码如下 
SecretKey deskey = keygen.generateKey();
byte[] desEncode=deskey.getEncoded();
javax.crypto.spec.SecretKeySpec destmp=new javax.crypto.spec.SecretKeySpec(desEncode,Algorithm);
SecretKey mydeskey=destmp;

  相关API

KeyGenerator 在DSA中已经说明,在添加JCE后在instance进可以如下参数

DES,DESede,Blowfish,HmacMD5,HmacSHA1

javax.crypto.Cipher 加/解密器 public static final Cipher getInstance(java.lang.String transformation)
throws java.security.NoSuchAlgorithmException,
NoSuchPaddingException
返回一个指定方法的Cipher对象

参数:transformation 方法名(可用 DES,DESede,Blowfish)

public final void init(int opmode, java.security.Key key)
throws java.security.InvalidKeyException

用指定的密钥和模式初始化Cipher对象

参数pmode 方式(ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE,UNWRAP_MODE)

  key 密钥

public final byte[] doFinal(byte[] input)
throws java.lang.IllegalStateException,
IllegalBlockSizeException,
BadPaddingException

对input内的串,进行编码处理,返回处理后二进制串,是返回解密文还是加解文由init时的opmode决定

注意:本方法的执行前如果有update,是对updat和本次input全部处理,否则是本inout的内容

/*
安全程序 DESede/DES测试
*/
import java.security.*;
import javax.crypto.*;
public class testdes {
public static void main(String[] args){
testdes my=new testdes();
my.run();
}
public void run() {
//添加新安全算法,如果用JCE就要把它添加进去
Security.addProvider(new com.sun.crypto.provider.SunJCE());
String Algorithm=”DES”; //定义 加密算法,可用 DES,DESede,Blowfish
String myinfo=”要加密的信息”;
try {
//生成密钥
KeyGenerator keygen = KeyGenerator.getInstance(Algorithm);
SecretKey deskey = keygen.generateKey();

//加密
System.out.println(“加密前的二进串:”+byte2hex(myinfo.getBytes()));
System.out.println(“加密前的信息:”+myinfo);
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE,deskey);
byte[] cipherByte=c1.doFinal(myinfo.getBytes());
System.out.println(“加密后的二进串:”+byte2hex(cipherByte));
//解密
c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.DECRYPT_MODE,deskey);
byte[] clearByte=c1.doFinal(cipherByte);
System.out.println(“解密后的二进串:”+byte2hex(clearByte));
System.out.println(“解密后的信息:”+(new String(clearByte)));

}
catch (java.security.NoSuchAlgorithmException e1) {e1.printStackTrace();}
catch (javax.crypto.NoSuchPaddingException e2) {e2.printStackTrace();}
catch (java.lang.Exception e3) {e3.printStackTrace();}
}
public String byte2hex(byte[] b) //二行制转字符串
{
String hs=””;
String stmp=””;
for (int n=0;n {
stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+”0″+stmp;
else hs=hs+stmp;
if (n }
return hs.toUpperCase();
}

}

 2.5. Diffie-Hellman密钥一致协议 
  公开密钥密码体制的奠基人Diffie和Hellman所提出的 “指数密钥一致协议”(Exponential Key Agreement Protocol),该协议不要求别的安全性 先决条件,允许两名用户在公开媒体上交换信息以生成”一致”的,可以共享的密钥。在JCE的中实现用户alice生成DH类型的密钥对,如果长度用 1024生成的时间请,推荐第一次生成后保存DHParameterSpec,以便下次使用直接初始化.使其速度加快 

System.out.println(“ALICE: 产生 DH 对 …”);
KeyPairGenerator aliceKpairGen = KeyPairGenerator.getInstance(“DH”);
aliceKpairGen.initialize(512);
KeyPair aliceKpair = aliceKpairGen.generateKeyPair();

alice生成公钥发送组bob byte[] alicePubKeyEnc = aliceKpair.getPublic().getEncoded();

bob从alice发送来的公钥中读出DH密钥对的初始参数生成bob的DH密钥对

注意这一步一定要做,要保证每个用户用相同的初始参数生成的 
DHParameterSpec dhParamSpec = ((DHPublicKey)alicePubKey).getParams();
KeyPairGenerator bobKpairGen = KeyPairGenerator.getInstance(“DH”);
bobKpairGen.initialize(dhParamSpec);
KeyPair bobKpair = bobKpairGen.generateKeyPair();

  bob根据alice的公钥生成本地的DES密钥
KeyAgreement bobKeyAgree = KeyAgreement.getInstance(“DH”);
bobKeyAgree.init(bobKpair.getPrivate());
bobKeyAgree.doPhase(alicePubKey, true);
SecretKey bobDesKey = bobKeyAgree.generateSecret(“DES”);

bob已经生成了他的DES密钥,他现把他的公钥发给alice,
byte[] bobPubKeyEnc = bobKpair.getPublic().getEncoded();

  alice根据bob的公钥生成本地的DES密钥
,,,,,,解码
KeyAgreement aliceKeyAgree = KeyAgreement.getInstance(“DH”);
aliceKeyAgree.init(aliceKpair.getPrivate());
aliceKeyAgree.doPhase(bobPubKey, true);
SecretKey aliceDesKey = aliceKeyAgree.generateSecret(“DES”);

bob和alice能过这个过程就生成了相同的DES密钥,在这种基础就可进行安全能信

  常用API

java.security.KeyPairGenerator 密钥生成器类
public static KeyPairGenerator getInstance(String algorithm)
throws NoSuchAlgorithmException
以指定的算法返回一个KeyPairGenerator 对象
参数: algorithm 算法名.如:原来是DSA,现在添加了 DiffieHellman(DH)

public void initialize(int keysize)
以指定的长度初始化KeyPairGenerator对象,如果没有初始化系统以1024长度默认设置
参数:keysize 算法位长.其范围必须在 512 到 1024 之间,且必须为 64 的倍数
注意:如果用1024生长的时间很长,最好生成一次后就保存,下次就不用生成了

public void initialize(AlgorithmParameterSpec params)
throws InvalidAlgorithmParameterException
以指定参数初始化

javax.crypto.interfaces.DHPublicKey
public DHParameterSpec getParams()
返回
java.security.KeyFactory

public static KeyFactory getInstance(String algorithm)
throws NoSuchAlgorithmException
以指定的算法返回一个KeyFactory
参数: algorithm 算法名SH,DH

public final PublicKey generatePublic(KeySpec keySpec)
throws InvalidKeySpecException
根据指定的key说明,返回一个PublicKey对象

java.security.spec.X509EncodedKeySpec
public X509EncodedKeySpec(byte[] encodedKey)
根据指定的二进制编码的字串生成一个key的说明
参数:encodedKey 二进制编码的字串(一般能过PublicKey.getEncoded()生成)
javax.crypto.KeyAgreement 密码一至类

public static final KeyAgreement getInstance(java.lang.String algorithm)
throws java.security.NoSuchAlgorithmException
返回一个指定算法的KeyAgreement对象
参数:algorithm 算法名,现在只能是DiffieHellman(DH)

public final void init(java.security.Key key)
throws java.security.InvalidKeyException
用指定的私钥初始化
参数:key 一个私钥

public final java.security.Key doPhase(java.security.Key key,
boolean lastPhase)
throws java.security.InvalidKeyException,
java.lang.IllegalStateException
用指定的公钥进行定位,lastPhase确定这是否是最后一个公钥,对于两个用户的
情况下就可以多次定次,最后确定
参数:key 公钥
lastPhase 是否最后公钥

public final SecretKey generateSecret(java.lang.String algorithm)
throws java.lang.IllegalStateException,
java.security.NoSuchAlgorithmException,
java.security.InvalidKeyException
根据指定的算法生成密钥
参数:algorithm 加密算法(可用 DES,DESede,Blowfish)

*/
import java.io.*;
import java.math.BigInteger;
import java.security.*;
import java.security.spec.*;
import java.security.interfaces.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import javax.crypto.interfaces.*;
import com.sun.crypto.provider.SunJCE;

public class testDHKey {

public static void main(String argv[]) {
try {
testDHKey my= new testDHKey();
my.run();
} catch (Exception e) {
System.err.println(e);

}
}

private void run() throws Exception {
Security.addProvider(new com.sun.crypto.provider.SunJCE());

System.out.println(“ALICE: 产生 DH 对 …”);
KeyPairGenerator aliceKpairGen = KeyPairGenerator.getInstance(“DH”);
aliceKpairGen.initialize(512);
KeyPair aliceKpair = aliceKpairGen.generateKeyPair(); //生成时间长 

// 张三(Alice)生成公共密钥 alicePubKeyEnc 并发送给李四(Bob) ,
//比如用文件方式,socket…..
byte[] alicePubKeyEnc = aliceKpair.getPublic().getEncoded();

//bob接收到alice的编码后的公钥,将其解码
KeyFactory bobKeyFac = KeyFactory.getInstance(“DH”);
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec (alicePubKeyEnc);
PublicKey alicePubKey = bobKeyFac.generatePublic(x509KeySpec);
System.out.println(“alice公钥bob解码成功”);
// bob必须用相同的参数初始化的他的DH KEY对,所以要从Alice发给他的公开密钥,
//中读出参数,再用这个参数初始化他的 DH key对

//从alicePubKye中取alice初始化时用的参数
DHParameterSpec dhParamSpec = ((DHPublicKey)alicePubKey).getParams();
KeyPairGenerator bobKpairGen = KeyPairGenerator.getInstance(“DH”);
bobKpairGen.initialize(dhParamSpec);
KeyPair bobKpair = bobKpairGen.generateKeyPair();
System.out.println(“BOB: 生成 DH key 对成功”);
KeyAgreement bobKeyAgree = KeyAgreement.getInstance(“DH”);
bobKeyAgree.init(bobKpair.getPrivate());
System.out.println(“BOB: 初始化本地key成功”);
//李四(bob) 生成本地的密钥 bobDesKey
bobKeyAgree.doPhase(alicePubKey, true);
SecretKey bobDesKey = bobKeyAgree.generateSecret(“DES”);
System.out.println(“BOB: 用alice的公钥定位本地key,生成本地DES密钥成功”);
// Bob生成公共密钥 bobPubKeyEnc 并发送给Alice,
//比如用文件方式,socket…..,使其生成本地密钥
byte[] bobPubKeyEnc = bobKpair.getPublic().getEncoded();
System.out.println(“BOB向ALICE发送公钥”);

// alice接收到 bobPubKeyEnc后生成bobPubKey
// 再进行定位,使aliceKeyAgree定位在bobPubKey
KeyFactory aliceKeyFac = KeyFactory.getInstance(“DH”);
x509KeySpec = new X509EncodedKeySpec(bobPubKeyEnc);
PublicKey bobPubKey = aliceKeyFac.generatePublic(x509KeySpec);
System.out.println(“ALICE接收BOB公钥并解码成功”);
;
KeyAgreement aliceKeyAgree = KeyAgreement.getInstance(“DH”);
aliceKeyAgree.init(aliceKpair.getPrivate());
System.out.println(“ALICE: 初始化本地key成功”);

aliceKeyAgree.doPhase(bobPubKey, true);
// 张三(alice) 生成本地的密钥 aliceDesKey
SecretKey aliceDesKey = aliceKeyAgree.generateSecret(“DES”);
System.out.println(“ALICE: 用bob的公钥定位本地key,并生成本地DES密钥”);

if (aliceDesKey.equals(bobDesKey)) System.out.println(“张三和李四的密钥相同”);
//现在张三和李四的本地的deskey是相同的所以,完全可以进行发送加密,接收后解密,达到
//安全通道的的目的

/*
* bob用bobDesKey密钥加密信息
*/
Cipher bobCipher = Cipher.getInstance(“DES”);
bobCipher.init(Cipher.ENCRYPT_MODE, bobDesKey);
String bobinfo= “这是李四的机密信息”;
System.out.println(“李四加密前原文:”+bobinfo);
byte[] cleartext =bobinfo.getBytes();
byte[] ciphertext = bobCipher.doFinal(cleartext);

/*
* alice用aliceDesKey密钥解密
*/
Cipher aliceCipher = Cipher.getInstance(“DES”);
aliceCipher.init(Cipher.DECRYPT_MODE, aliceDesKey);
byte[] recovered = aliceCipher.doFinal(ciphertext);
System.out.println(“alice解密bob的信息:”+(new String(recovered)));
if (!java.util.Arrays.equals(cleartext, recovered))
throw new Exception(“解密后与原文信息不同”);
System.out.println(“解密后相同”);

}

}



第3章 小结 
  在加密术中生成密钥对时,密钥对的当然是越长越好,但费时也越多,请从中从实际出发选取合适的长度,大部分例码中的密钥是每次运行就从新生成,在实际的情 况中是生成后在一段时间保存在文件中,再次运行直接从文件中读入,从而加快速度。当然定时更新和加强密钥保管的安全性也是必须的。

网上支付方式 ,网上支付方式有哪些

2010年03月16日

  网上购物中施用的支付方式有许多种,网上银行是最基本的形式。比较常见的支付方式作一介绍:

  一、支付宝

  支付宝网站(www.alipay.com)是国内进步前辈的网上支付平台 ,由阿里巴巴公司创办,致力于为网络生意业务用户供给优质的安全支付服务。

  支付宝服务自2003年10月18日在淘宝网网推出以来,在短短的几年时间,迅速成为会员网上生意业务不可缺少的支付方式,深受淘宝网会员喜爱。

  经过不断的革新,支付宝服务日趋完善。为了更好的运营支付宝,为用户供给更优质的服务,成立了支付宝公司,并于2004年12月30日推出支付宝账户体系。

  2、贝宝

   贝宝是由上海网付易信息技术有限公司与世界领先的网络支付公司——PayPal公司共同起劲为中国市场度身定做的网络支付服务。贝宝利用 PayPal 公司在电子商务支付领域进步前辈的技术、风险管理与控制以及客户服务等方面的能力,通过研发适合中国电子商务市场与环境的产品,为电子商务的生意业务平台 和生意业务者供给安全、便捷和快速的生意业务支付支持。

  3、快钱

  快钱公司是独立第三方支付企业,最早推出基于Email和手机号码的综合电子支付服务,拥有千万级注册用户。

   快钱致力于为各类企业及小我私家供给安全、便捷和保密的电子收付款平台及服务。作为快钱的基础服务,快钱帐户供给了充值、收款、付款、提现、对于帐、生 意业务明细查询等功能。以“快钱”为品牌的支付产品包括人民币网关、外卡网关和神州行网关等众多产品,支持互联网、手机和固话等多种终端, 满足各类企业和小我私家的差别支付需求。其中人民币网关支持银行卡支付、快钱帐户支付、电话支付、线下汇款等多种支付方式。同时,快钱还为商家供给众多实 用的生意业务工具,包括快钱钮、快钱链、多笔生意业务付款、电子优惠券等,协助商家广泛深入地开展电子商务。

  四、云网

   北京云网公司成立于1999年12月,云网目前拥有国内极其完善的银行卡在线实时支付平台和5年的数码商品电子商务运营经验。占有国内网上数码卡生意业 务市场份额的80%以上,日成功生意业务过4万笔,年营业额逾2亿元人民币,连续多年在全国各个银行网上支付B2C商户中压倒一切。目前云网支付@网是在 支持银行卡卡种、覆盖范围和实时生意业务速率等方面都居国内领先位置的支付平台。

  5、网汇通

  中国供给互 联网现金汇款、支付的服务供给商,集联天下公司与中国邮政精密互助, 供给“网汇通”业务的数据处理和谋划。2005年成立以来,作为在线支付市场的新力量, 集联天下公司致力互联网新经济和传统行业相结合的研究,为电子支付的贸易应用, 开创性地推出崭新的电子金融服务产品——网汇通。由于中国邮政的网络散布到城乡, “网汇通”产品更加具备服务于普通民众的特性。集联天下公司兼蓄国表里进步前辈资源、 建造的大型计算机处理体系,会遵照消费者的指令,将资金安全、靠得住、实时地送达。

  6、财付通

  财付通网 站 (www.tenpay.com) 作为功能壮大的支付平台,作为在线支付工具,在B2C、C2C在线生意业务中,起到了信用中介的效用,同时为CP、SP供给了在线支付通道以及统一的计费 平台,排除了小我私家用户和广大商家的安全顾虑,保证了在线生意业务的资金和商品安全。

  七、拉卡啦

  北京 拉卡啦信息咨询有限公司(BeiJing Lakala Billing Service Co.,Ltd)是遐想投资、金山投资等多家著名公司参与投资组建的专业化电子账单支付平台运营公司。公司汇聚了一批IT、金融领域的人才,致力于用创新 精力、创新技术、创新模式处理完成中国电子商务的支付“瓶颈”,推动中国电子商务的成长。

  申请的方式:网上申请

  我收集的网上B2支付公司推荐列表

  一、国内支付网关:

  支付宝(https://www.alipay.com/)

  说明:浙江支付宝网络科技有限公司 是阿里巴巴旗下支付公司,拥有淘宝网、阿里巴巴网站上的大量用户。

  贝宝(http://www.paypal.com/cn)

  说明:上海网付易信息技术有限公司 与PayPal互助供给网络支付服务。PayPal为全球最大支付公司。

  网银在线(http://www.chinabank.com.cn)

  说明:网银在线科技有限公司

  快钱(http://www.99bill.com/)

  说明:上海快钱信息服务有限公司 供给基于EMAIL和手机号码的网上收付款服务,已形成了一定例模的本身的用户群。

  环讯IPS(http://www.ips.com.cn/) 已互助

  说明:上海环迅电子商务有限公司

  腾讯财付通(http://www.tepay.com/)

  说明:腾讯的支付平台,拥有QQ用户群。

  首信易支付(http://www.beijing.com.cn/)

  说明:首信易支付(前身为“首都电子商城”)具有北京政府投资配景,主体企业——首都信息成长股份有限公司由北京市财政局资金管理分局等六家股东拿出钱财设立。香港联交所上市。

  YeePay易宝(http://web.yeepay.com/)已互助

  说明:北京通融通信息技术有限公司 电话支付为主

  Chinapay支付(http://www.chinapay.com/)

  说明:中国银联控股公司,支付网关。

  拉卡啦(http://www.lakala.com/) 已互助

  说明:北京拉卡啦信息咨询有限公司 刷卡电话支付

  云网支付(http://www.cncard.net/)

  说明:北京云网公司 的支付网关,拥有云网的用户群。

  汇付天下(http://www.chinapnr.com/)

  说明:汇付网络科技有限公司 今年新成立支付公司,印尼第二大财团三宝麟投资,总裁周晔为前CHINAPAY的总经理,具有银联配景。

  酷币(http://pay.95cool.com)

  说明:鸿联九五旗下支付网关。

  BilltoBill(http://www.billtobill.com.cn)

  说明:澳大利亚的注册公司,在上海。上风在于BilltoBill能够供给最全面的支付方式和对于国际支付业务的支持,与国际支付卡组织、国内数十几家银行的互助,支持国内银行卡支付、国际信用卡支付、电话支付、线下支付和手机支付,与南航有互助。

  ALLBUY(www.allbuy.cn )

  无忧钱包(http://www.51qb.com/)

  西部支付

  说明:已并入YeePay,成为YeePay成都分公司。

  6688支付

  8848支付

  EPAY网关

  NPS网关

  和讯支付

  XPAY支付

  IPAY支付

  二、国外支付网关:

  PayPal(http://www.paypal.com/)

  说明:全球商务网站eBay旗下支付公司,全球最大支付网关,可向55 个国度和地域的用户发送和接收付款,

  Google Checkout

  说明:搜索引擎公司Google于今年6月在美国市场推出的在线支付体系,此刻看来效果不佳。

  Nochex

  三、移动支付:

  联动上风(http://www.umpay.com/)

  说明:北京联动上风科技有限公司

  成立于2003年8月的北京联动上风科技有限公司是中国移动与中国银联的合资公司,至力于为中国移动用户和商户供给“手机钱包”服务。

   “手机钱包”是中国移动与中国银联络合各大国有及股份制贸易银行共同推出的一项全新移动电子支付、金融信息服务,顾名思义,是通过把客户的手机号码与银 行卡等支付帐户进行绑定,随时随地为中国移动手机客户供给的移动支付通道服务。用户可施用手机短信、语音、WAP 、K-Java、USSD等操作方式,管理本身指定的银行卡帐户或小额中间帐户,并实现从帐户中进行扣费。

  “手机钱包”是中国移动对于其移动支付服务的统一叫法,而银联方面除了称此业务为“手机钱包”,在有些情况下还习惯称之为“移动支付”、“移动银行”或者“手机银行”。

   寄托在运营商和金融界的壮大配景与资金实力,联动上风自2004年8月开通业力以来成长迅速,据称其注册用户已跨越300万,近期联动上风又与TOM等 门户网站开展互助,签定协议共同研发中国移动支付市场,此次互助既可当做TOM等门户涉足移动支付领域的信号,也可以看出联动上风在移动支付行业中所处地 位和实力。

  业务范围

  手机钱包主要包括三部分基本业务:理财、缴费和购物。

  联龙博通(http://www.chinamworld.com/)

  说明:北京联龙博通电子商务技术有限公司

  北京联龙博通电子商务技术有限公司成立于2001年,通过其主营业务–手机银行–为联通用户供给移动金融、移动支付、移动电子商务服务。

   2004年3月北京联龙博通电子商务技术有限公司与中国建设银行和中国联通公司共同签署了“关于手机银行业务的三方互助协议”,并于同年7月19日在全 国范围内正式上线开通手机银行业务,业务开展初期运行于联通CDMA1X数据通信网络和BREW技术平台,2005年11月联通WAP(包括1.2和 2.0)版手机银行业务正试上线。

  手机银行

  手机银行是利用手机终端办理非现金类银行业务、各类远程支付 业务以及移动电子商务等业务的简称。BREW(BREW在CDMA手机上的具体体现为“神奇宝典”功能)版本的手机银行业务是将专用的金融服务程序通过空 中下载或程序预装到客户手机,使客户的手机变成一个专用的金融终端,通过将客户的手机号码与银行账户绑定之后,运中国联通有限公司的移动通信网络及数据业 务平台,实时和银行服务器保持联网状态,让客户的手机嬗变成具有金融理财、远程支付和移动电子商务等功能的综合性自助金融工具。WAP版本手机银行功能与 BREW版手机银行功能基本一致。

  具体功能

  金融终端功能:查询、缴费(与各地建行代理缴费项目保持一致)、转账、汇款、银证转账、外汇生意和银行账户管理

  支付功能:远程支付平台用户终端

  电子商务功能:购买数码卡(IP卡、移动联通充值卡、游戏点卡、邮箱卡、杀毒卡等)、机票(即将开通)、福彩(即将开通)等等。

  业务特点

  全国开通(建行总行接入,全国38个一级分行同时开通)

  全网漫游(联通总部接入)

  二十四小时在线(与建行网银体系时实互联)

  全功能支持(除现金存取外银行栏柜所有功能均可实现)

  资费

  服务费:10元/月(BREW、WAP)

  流量费:2分/K

  银行手续费:汇款费率为0.6% 最大限度30元(栏柜费率的六折)

  此刻服务开通范围:联通BREW、WAP全国 移动WAP部分省市

  上海捷银(http://www.smartpay.com.cn/website/index.html)

  说明:上海捷银信息技术有限公司

  捷银前身是英克斯内部的一个项目行得通性研究小组.

  2002年10月,捷银结合建设银行等7家银行与上海大众燃气公司和浦东燃气公司共同推出了煤气费移动代缴业务。

  通过捷银移动支付平台,用户如持有建设银行、招商银行、深圳成长银行、民生银行、福建兴业银行、中原银行及广东成长银行7家银行中任何一家的借记卡或信用卡,即可施用手机以短信方式缴纳煤气费。

  2002年底,捷银与河北中原银行、河北贸易银行及福利彩票管理中间共同推出福利彩票移动投注业务。

  用户通过手机,发送短信的方式直接购买彩票,支付只需通过银行账户直接转账即可。

  2002年年底,中标广东移动“移动支付体系”招标项目。

  捷银供给给广东移动一套移动支付体系的软件,广东移动则付给捷银软件费用。

  2003年11月,与江苏联通互助运营移动支付业务。

  江苏联通最终同捷银达成了一个让捷银期待的互助模式:捷银供给一个移动支付的平台,而联通则供给他们数量巨大的用户,双方按照约定的比例分摊收入。

   与江苏联通互助模式确立之后,捷银很快进入了高速成长的阶段。同江苏联通的这种互助运营模式很快被其它省市的移动运营商所接受,捷银连续同上海联通、安 徽联通、河北联通、重庆联通、辽宁联通、山东联通等运营商达成互助协议,而且互助的模式都是和江苏联通一样。捷银声称,已经达成互助协议的移动运营商覆盖 着大约5000万的潜在用户市场.

  股东与融资:

  捷银是由英斯克计算机有限公司、IconMedialab和网际威信股份有限公司共同拿出钱财创建的公司。

  英斯克计算机有限公司在中国移动数据通信技术市场具有领先的地位

  IconMedialab是一家在瑞典上市的电子商务咨询公司,其安全支付技术在欧洲占有领先地位。

  网际威信股份有限公司是一家由Acer、VeriSign 、香港上海汇丰银行 (HSBC)和美国国际集团 (AIG)共同投资的公司,在银行体系集成和安全电子商务市场具有领先地位。

  2004年7月28日,捷银在香港宣布新一轮融资6500万港元已经到位。

  依照融资协议,著名投资商2b Holdings 将带领众多战略投资者和现有股东向捷银供给6500万港元的资本投资。

  2b Holdings是中国第一家用电器子商务及网上拍卖公司易趣的最早的一批投资人之一。并一手促成2002年易趣和eBay 建立了战略伙伴关系,在随即的2003年又以22500万美元现金完成了eBay对于易趣的收购。

  2005年9月,捷银宣布获第三轮融资,融资额为2000万美元,虽然一定的数目并不惊人,但它仍引起业界关注的缘故原由在于其融资方RRE涉足中国手机支付市场背后所蕴涵的重大信号。

   RRE是国际著名金融领域投资机构,其创始人Robinson先生和McGinn先生曾经分别长期担任过美国运通公司和朗讯公司的总裁和CEO。RRE 的董事顾问还包括现Yahoo主 席和CEOSemel先生,现奥美(Ogilvy&Mather)总裁和CEOLazarus先生,曾经任美洲银 行(BankofAmerica)总裁和CEO的Coulter先生以及曾经任百事公司和CBS广播公司总裁和CEO的Jordan先生。如此之多的行业 巨头要在中国手机市场涉水,行业信号是相当明显的。

  捷银首席执行官罗圣平称,他给捷银的计划表是两年之后,捷银的移动支付用户达到500万,然后去纳斯达克上市。

  梦联信通(http://www.nationm.com.cn/)

   说明:北京梦联信通科技有限公司北大资源集团和北大科技园投资。从事手机银行支付(又称梦联信畅达通支付)和移动电子商务的运营服务和技术研发。支持的 技术平台包括:互联网、移动互联网(WAP)、短信、和电话网平台。梦联信通目前为三百多家主流互联网电子商务网站、互联网门户、WAP门户、交友社区、 电影下载、B2C/C2C生意业务市场、虚拟装备、电话购物、游戏厂商、及移动SP等供给手机代收费服务。

  掌上通(http://59.151.60.4/)

  说明:北京掌上通网络技术有限公司 盟卡支付为其盟卡数码商城(http://card.9588.com/)的支付平台。掌上通现已将主要精力转做电子机票。

用 HttpServletResponseWrapper 实现 Etag 过滤器

原文出处:http://blog.chenlb.com/2009/07/use-httpservletresponsewrapper-implement-etag-filter.html

最近对 http caching 感兴趣,决定一步步学习之。现先来了解 Etag。

什么是“ETag”?

HTTP协议规格说明定义ETag为“被请求变量的实体值” (参见 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html —— 章节 14.19)。 另一种说法是,ETag是一个可以与Web资源关联的记号(token)。典型的Web资源可以一个Web页,但也可能是JSON或XML文档。服务器单 独负责判断记号是什么及其含义,并在HTTP响应头中将其传送到客户端。

如果http 请求头 If-None-Match 的内容,与服务器对资源算出来的 etag 相同,就返回 304 响应。

下面来动动手,实现一个 etag 过虑器。原理:用 HttpServletResponseWrapper 把正常的页面输出到一个 byte 数组里,然后计算 etag,etag 是否与请求头一致,再进一步处理。

代码实现:

  1. package  com.chenlb.http;  
  2.   
  3. import  java.io.ByteArrayOutputStream;  
  4. import  java.io.IOException;  
  5. import  java.io.PrintWriter;  
  6. import  java.util.Calendar;  
  7. import  java.util.Date;  
  8. import  java.util.zip.CRC32;  
  9.   
  10. import  javax.servlet.Filter;  
  11. import  javax.servlet.FilterChain;  
  12. import  javax.servlet.FilterConfig;  
  13. import  javax.servlet.ServletException;  
  14. import  javax.servlet.ServletOutputStream;  
  15. import  javax.servlet.ServletRequest;  
  16. import  javax.servlet.ServletResponse;  
  17. import  javax.servlet.http.HttpServletRequest;  
  18. import  javax.servlet.http.HttpServletResponse;  
  19. import  javax.servlet.http.HttpServletResponseWrapper;  
  20.   
  21. public   class  EtagFilter  implements  Filter {  
  22.   
  23.     public   void  destroy() {}  
  24.   
  25.     public   void  doFilter(ServletRequest request, ServletResponse response,  
  26.             FilterChain chain) throws  IOException, ServletException {  
  27.   
  28.         HttpServletRequest servletRequest = (HttpServletRequest) request;  
  29.         HttpServletResponse servletResponse = (HttpServletResponse) response;  
  30.   
  31.         ByteArrayOutputStream baos = new  ByteArrayOutputStream();  
  32.         HttpServletResponseWrapper hsrw = new  MyHttpResponseWrapper(servletResponse, baos);  
  33.   
  34.         chain.doFilter(request, hsrw);  
  35.   
  36.         hsrw.flushBuffer();  
  37.   
  38.         byte [] bytes = baos.toByteArray();  
  39.   
  40.         CRC32 crc = new  CRC32();  
  41.         crc.update(bytes);  
  42.   
  43.         String token = “w//””  + crc.getValue() +  ‘”‘ ;  
  44.         servletResponse.setHeader(“ETag” , token);  
  45.         // always store the ETag in the header   
  46.         String previousToken = servletRequest.getHeader(“If-None-Match” );  
  47.         if  (previousToken !=  null  && previousToken.equals(token)) {  
  48.             // compare previous token with current one         
  49.   
  50.             System.out.println(“ETag match: returning 304 Not Modified” );  
  51.             servletResponse.sendError(HttpServletResponse.SC_NOT_MODIFIED);  
  52.             // use the same date we sent when we created the ETag the first time through   
  53.             servletResponse.setHeader(“Last-Modified” , servletRequest.getHeader( “If-Modified-Since” ));  
  54.         } else   {  
  55.             // first time through – set last modified time to now   
  56.             Calendar cal = Calendar.getInstance();  
  57.             cal.set(Calendar.MILLISECOND, 0 );  
  58.             Date lastModified = cal.getTime();  
  59.             servletResponse.setDateHeader(“Last-Modified” , lastModified.getTime());  
  60.             System.out.println(“Writing body content” );  
  61.             servletResponse.setContentLength(bytes.length);  
  62.             ServletOutputStream sos = servletResponse.getOutputStream();  
  63.             sos.write(bytes);  
  64.             sos.flush();  
  65.             sos.close();  
  66.         }  
  67.   
  68.     }  
  69.   
  70.     public   void  init(FilterConfig config)  throws  ServletException {}  
  71.   
  72.     private   static   class  MyHttpResponseWrapper  extends  HttpServletResponseWrapper {  
  73.   
  74.         ByteServletOutputStream servletOutputStream;  
  75.         PrintWriter printWriter;  
  76.   
  77.         public  MyHttpResponseWrapper(HttpServletResponse response, ByteArrayOutputStream buffer) {  
  78.             super (response);  
  79.             servletOutputStream = new  ByteServletOutputStream(buffer);  
  80.         }  
  81.   
  82.         public  ServletOutputStream getOutputStream()  throws  IOException {  
  83.             return  servletOutputStream;  
  84.         }  
  85.   
  86.         public  PrintWriter getWriter()  throws  IOException {  
  87.             if (printWriter ==  null ) {  
  88.                 printWriter = new  PrintWriter(servletOutputStream);  
  89.             }  
  90.             return  printWriter;  
  91.         }  
  92.   
  93.         public   void  flushBuffer()  throws  IOException {  
  94.             servletOutputStream.flush();  
  95.             if (printWriter !=  null ) {  
  96.                 printWriter.flush();  
  97.             }  
  98.         }  
  99.     }  
  100.   
  101.     private   static   class  ByteServletOutputStream  extends  ServletOutputStream {  
  102.   
  103.         ByteArrayOutputStream baos;  
  104.   
  105.         public  ByteServletOutputStream(ByteArrayOutputStream baos) {  
  106.             super ();  
  107.             this .baos = baos;  
  108.         }  
  109.   
  110.         public   void  write( int  b)  throws  IOException {  
  111.             baos.write(b);  
  112.         }  
  113.     }  
  114. }  

web.xml 配置:

  1. < filter >   
  2.     < filter-name > etag </ filter-name >   
  3.     < filter-class > com.chenlb.http.EtagFilter </ filter-class >   
  4. </ filter >            
  5.   
  6. < filter-mapping >   
  7.     < filter-name > etag </ filter-name >   
  8.     < url-pattern > *.jsp </ url-pattern >   
  9. </ filter-mapping >   

测试环境是 tomcat 6.0.18。

用 httpwatch 可以观察效果。

用 HttpServletResponseWrapper 实现 Etag 过滤器

etag-filter,点击放大

第二次请求(刷新),返回 304 。说明有效了。

过虑器同时还加了 Last-Modified 是为了兼容不支持 Etag 头的客户端。

参考:使用ETags减少Web应用带宽和负载

infoq 下载来的代码没试用通过,原因是没有 flush PrintWriter。虽然有 304,但返回的内容为空。

当然算 etag 可用其它算法,我这里用 crc32。infoq 例子中用 md5。

项目经理需要修炼的8件事

作为项目经理,最重要的就是带领整个项目团队一起战斗,做好团队建设,才能激发整个团队成员的士气,提高团队成员的绩效。

 

所以,作为项目经理,是一种修炼,以下种种都是需要慢慢修炼的:

1,脾气一定要控制好。不管是团队成员没有按时完成工作或者是客户方总是发生变更,总之你没有任何理由可以发脾气,尤其是当着团队成员的面发脾气;

 

2,遇事莫慌。项目风险总是存在的,各种问题也总是存在的,天大的事情只要冷静,一定会想出解决方法。倘若不够冷静,很可能胡乱作出错误决定,一个错误的决定后果往往是严重的,带来的可能是返工、项目失败等后果。记住,一定要坚持一次把事情做对;

 

3,永远不要让上级领导来帮你想解决方案。这个是很多人容易犯的错误,经常把问题抛给领导,然后怪领导不支持你的工作不解决你遇到的问题。记住,领导只是做决策的,而不是帮你想解决方案的,否则要你干啥用?举个例子,当项目资源不足,需要申请资源时,千万不要直接告诉领导资源不足就完了,一定要告诉他面对资源不足,有什么样的后果,然后有几种解决方案,每种方案的优缺点是什么,然后请领导来选择一个方案;

 

4,记住抱怨是没有用的。仔细回想一下,什么时候抱怨有用过?如果抱怨有用的话,那还要你干嘛?大家随便抱怨一下,心中的理想就能实现了,抱怨工资低,老板就乖乖涨工资了,你觉得可能吗?记住,抱怨是没有用的,过多的抱怨,只会证明你是一个没有用的项目经理。遇到问题,就想破脑袋去解决。比如,团队成员有背景,耍专家大牌,不听你的话,抱怨有用吗?不如想想问题的根源,再自己进修一把与人沟通的技巧吧,这问题一定是出在你自己身上,毋庸置疑的;

 

5,要相信你的团队成员,多鼓励他们。批评是在团队建设中最为忌讳的,除非出现非常严重的问题,才要慎重的考虑是否要批评。在批评的各种方法里,当众点名批评是最为严重的了。切记,每个人都是有自尊的。你要相信你的团队成员,相信他们都是优秀的。如果他们不优秀,一定是你的责任,你没有能够激发他们的士气,没有能够帮助他们提高工作绩效。相信他们,并鼓励他们,让他们做合适的工作;

 

6,注意公平公正。这是一个项目经理必须具备的品质,是一种职业道德。对待项目团队成员,必须公平公正地评价他们的工作绩效,并加以适当奖励。

7,客观如实汇报。这也是一个职业道德。对于项目状态,必须客观如实公布给干系人,越是隐瞒风险越高。人总会害怕因为犯错误被批评而有所隐瞒项目中坏的一面,报喜不报忧估计很多人都干过。其实做项目,出现问题不可怕,可怕的是不把问题暴露出来,不让大家一起帮你分析解决,到了项目失败的时候也就是你的职业失败的时候了。我知道,要能客观如实地汇报,有点难,但是记住,这是必须的;

 

8,功劳不是自己的。记住,作为一个团队,你激励大家完成了项目,最终获得的功劳不是你一个人的,而是大家的。不仅如此,项目过程中,任何一个点子一个解决方案的功劳,你都不能据为己有,哪怕这个真的是你想出来的,你也不能说是自己的,那是大家的智慧。甚至,你根本就不应该从你的嘴里去说出解决方案,而是应该引导团队成员让他们说出来,然后表扬他们的智慧;

银证合作的业务种类

银证合作的业务种类也趋于一致,通常可以划分为以下几类:

    1、账户管理类:开户、销户、变更、查询

    2、资金转账类:转入、转出、冲正、查询

    3、资金冻结类:冻结、解冻、冲正、查询

    4、清算对账类:总账、明细、清算、查询

    对应于每一个业务种类,不同银行和证券公司之间在操作流程上的差异仍然较大,同一业务可能有多种应用方式:券商发起、银行发起、双方发起,但每一个业务对应的信息交换内容趋同。

     本标准的结构设计参考了ISO15022,并借鉴了很多国际成熟产品和系统的经验。国际标准化组织(ISO)作为全球影响力最大的国际标准化组织,制定了多个行业的多个标准。ISO15022是一个最新的先进的数据标准化的标准,它主要是定义了证券交易过程里,需要交换传递的信息中每个字段的意义,交易里每条信息应该包括哪些内容。ISO15022符合加入WTO后我们国家的采标大原则,也符合中国金融业的开放需要,有利于金融行业内部各主体之间的互利合作;ISO15022的发展方向与中国银行业和证券业的发展趋势一致,且能满足大部分业务需要。

    在证券行业中,FIX是最重要的标准,但是它有它的局限性。在交易的三个领域中,FIX协议在交易前与交易中这两个领域中占有绝对的地位,而交易后的领域,按照STP的实施模式,交易双方的资金流向多发生在不同的银行系统中,这正是SWIFT/ISO15022的应用领域。尤其是ISO15022已经在192个国家、7000家金融机构应用颇广的协议。

    1、面向对象化的设计 

   目前国内对银证转账业务的数据交换主要有2种模式:一种是文件交换、一种是包交换,国际上主流的数据交换协议(如FIX,ISO15022)都是包交换方式,本标准采用的也是包交换方式。主要设计思路是:在将业务要素从其实际表现形式中分离出来并保证所有业务信息(Message)均以相同的方式表达。

    (1)数据字段(Data Field):

    先将信息元素抽象成数据字段;

    (2)数据域:

    数据域(MessageSet)是构成信息块的唯一要素,按照亲合度由数据字段组成数据域。它包括两类:通用数据域(如交易地点,时间,币种,账号等通用商业要素)和非通用数据域,可以重用。

    (3)信息块(Message Blocks):

    将数据域按照相应的交易类型组成信息块,它包含通用信息块和业务信息块。通用信息块应被每个信息体引用,是必选信息块。每个信息体都应该包含:块开始标志,发送方参考信息,信息功能,发送时间,交易类型,块结束标志。

    (4)信息体(Message Type):

    信息体由一个或多个信息块组成,每个信息体对应一种交易类型,本标准又称为数据包(如表1)。

    2、信息体结构和设计

    信息体的设计采用ISO15022MT5xx系列信息包设计方法,每一个信息体有许多彼此平行或嵌套的小信息体组成,每个信息体的结构如图2。

    3、业务定义

    将银证转账划分为以下几个交易类型,每个交易类型对应一类信息体,每个信息体的包名称及包编码如表2所示。

    (1)认证 (MT001)

    认证包括签到与签退两个业务类型。

    (2)开户(MT002)

    开户是为了实现建立证券端资金账户和银行账户之间的对应关系,包括开设资金账户或开设股票账户并建立对应关系。

    (3)账户管理(MT003)

    账户管理包括:销户、冻结、解冻等业务类型。

    (4)换卡管理(MT004)

    换卡管理包括更换银行卡、更换证券卡等业务类型。

    (5)投资者资料修改(MT005)

    投资者资料修改包括:修改个人信息、修改代理人信息、修改机构信息、修改证券端投资者信息、修改银行端投资者信息等业务类型。

    (6)转账请求(MT006)

    转账请求用来传递一个资金转账指令,转账请求由发起投资者指定的金融机构发送,直接或者通过中间机构,送给受益投资者所在的金融机构。

    转账请求用来作净支付。不能用于作支票,汇款,或者分步执行的交易。

    (7)转账回执(MT 007)

    转账回执用作转账MT 006的回应。

    (8)对账信息(MT008)

    对账用于请求进行明细对账或汇总对账。对账可以由银行端发出,或证券端发出,接受方接受到MT008后应返回对账回执MT009(明细对账、汇总对账)。

    (9)对账回执(MT 009)

    MT009用于反馈对账请求(MT008) 的请求,向传送方传送指定账户账目发生明细,合计等。

    (10)查询信息(MT010)

    查询包括:查询资金信息、查询投资者基本信息、查询资金发生流水。

    (11)查询回执(MT011)

    用来回应MT010的查询,包括:回答资金信息、回答投资者基本信息、回答资金发生流水、回答行情信息、回答股票余额等业务类型。

    结束语

    在硝烟弥漫的金融战场,竞争的大幕已经拉开,随着我们标准化工作的探索,银证合作业务一定会从不规范走向规范,从无序走向有序。吹雪弹剑看峥嵘,只有通过市场参与主体的推动,标准的宣传贯彻才能得以实行,才能切实提高市场运行效率,打造资本市场的核心竞争力。我们相信,依靠标准化建章立制,促进市场发展和技术进步,面对混业竞争的江湖,我们才能问一声,剑在手,天下谁是英雄。

Eclipse智能提示及快捷键

 

1、java智能提示

(1). 打开Eclipse,选择打开” Window - Preferences”。

(2). 在目录树上选择”Java-Editor-Content Assist”,在右侧的”Auto-Activation”找到”Auto Activation triggers for java”选项。默认触发代码提示的就是”.”这个符号。

(3). 在”Auto Activation triggers for java”选项中,将”.”更改:.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

2、XML智能提示

(1). 打开Eclipse,选择打开” Window - Preferences”。

(2). 在目录树上选择”XML-Editor-Content Assist”,在右侧的”Auto-Activation”找到”Prompt when these characters are inserted “选项。

(3). 在”Prompt when these characters are inserted”选项中,将”<=: ,”更改:<=:.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW(,

3、快捷键

(1)Ctrl+Space

说明:内容助理。提供对方法,变量,参数,javadoc等得提示,应运在多种场合,总之需要提示的时候可先按此快捷键。注:避免输入法的切换设置与此设置冲突

(2)Ctrl+Shift+Space

说明:变量提示

(3)Ctrl+/

说明:添加/消除//注释,在eclipse2.0中,消除注释为Ctrl+/

(4)Ctrl+Shift+/

说明:添加/* */注释

(5)Ctrl+Shift+/

说明:消除/* */注释

(6)Ctrl+Shift+F

说明:自动格式化代码

(7)Ctrl+1

说明:批量修改源代码中的变量名,此外还可用在catch块上.

(8)Ctril+F6

说明:界面切换

(9)Ctril+Shift+M

说明:查找所需要得包

(10)Ctril+Shift+O

说明:自动引入所需要得包

(11)Ctrl+Alt+S

说明:源代码得快捷菜单。其中的Generate getters and setters 和 Surround with try/catchblock比较常用.建议把它们添加为快捷键.快捷键设置在windows->preferences->Workbench->Keys

4、跟踪调式

单步返回 F7

单步跳过 F6

单步跳入 F5

单步跳入选择 Ctrl+F5

调试上次启动 F11

继续 F8

使用过滤器单步执行 Shift+F5

添加/去除断点 Ctrl+Shift+B

显示 Ctrl+D

运行上次启动 Ctrl+F11

运行至行 Ctrl+R

Ctrl+U重构作用域 功能 快捷键

撤销重构 Alt+Shift+Z

抽取方法 Alt+Shift+M

抽取局部变量 Alt+Shift+L

内联 Alt+Shift+I

移动 Alt+Shift+V

重命名 Alt+Shift+R

重做 Alt+Shift+Y

当您尝试登录到 Telnet 服务器正在运行 Windows Server 2003,与 Service Pack 1 或 Service Pack 2 时出现

http://support.microsoft.com/kb/309523
当试图登录到 Telnet 服务器与 Service Pack 1 或 Service Pack 2 运行 Microsoft Windows Server 2003 时您会收到以下错误消息:
正在初始化 telnet 会话时出错。外壳程序进程可能不具有已启动。
Telnet 服务器已关闭了连接

此外,Telnet 服务器上应用程序事件日志中记录以下事件:

事件类型: 错误
事件源: TlntSvr
事件类别: 无
事件 ID: 4049
用户: 不适用
说明:
创建 CMD 进程时出错。
系统错误: 该存根 (stub) 接收到坏数据。

如果用户帐户登录到 Telnet 服务器上使用的环境变量中有多个 5,120 的字符,就会出现此问题。

原因

出现此问题是由于在 Telnet 服务器上 Seclogon.dll 文件中的行为。如果在函数中指定的环境变量中包含多个 5,120 字符 Seclogon.dll 文件 CreateProcessWithTokenW 函数返回一个错误。

解决方案

修补程序信息

可以从 Microsoft 获得支持的修补程序。但是,此修补程序被用于解决本文所述的此问题。此修补程序仅应用于出现这一特定问题的系统。此修补程序可能会接受进一步的测试。因此,如果此问题没有对您造成严重的影响,我们建议您等待包含此修补程序的下一个软件更新。

是否可供下载此修补程序没有”提供修补程序下载”部分中,在这篇知识库文章的顶部。如果不会显示此部分,请联系 Microsoft 客户服务和支持以获取此修复程序。

注意 如 果出现其他问题,或者如果需要进行任何故障诊断,则您可能不得不创建单独的服务请求。将正常收取支持费用将应用于其他支持问题和不需要进行此特定的修补程 序的问题。有关完整列表的 Microsoft 客户服务和支持的电话号码,或创建一个单独的服务请求,请访问下面的 Microsoft 网站:

注意 “提供修补程序下载”窗体所显示的此修复程序是可用的语言。如果您看不到您的语言,则是一个修复程序不能用于该语言。

系统必备组件

若 要将此修补程序必须具有 Windows Server 2003 Service Pack 1 或 Windows Server 2003 Service Pack 2 计算机上安装。有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

889100   如何获取最新的 service pack,Windows Server 2003 的

重新启动要求

应用此修补程序后,您必须重新启动计算机。

修补程序替换信息

此修补程序不替代任何其他修补程序。

文件信息

此修补程序的英文版具有的文件属性 (或更新的文件属性) 在下表中列出。日期和时间对这些文件列出在协调世界时 (UTC)。当您查看文件信息时,将转换为本地时间。若要 UTC 与本地时间之间的时差使用控制面板中的 日期和时间 项中的 时区 选项卡。

Windows Server 2003 与 x 基于 x86 版本的 Service Pack 1
文件的名称 文件版本 文件大小 日期 时间 平台
Seclogon.dll 5.2.3790.2938 18,944 2007 年五月 17 日 19: 43 x86

Windows Server 2003 与 x 基于 x86 版本的 Service Pack 2
文件的名称 文件版本 文件大小 日期 时间 平台
Seclogon.dll 5.2.3790.4083 18,432 2007 年五月 17 日 19: 04 x86

Windows Server 2003 与 Service Pack 1,基于 Itanium 的版本
文件的名称 文件版本 文件大小 日期 时间 平台 SP 要求 服务分支
Seclogon.dll 5.2.3790.2938 48,128 2007 年五月 17 日 05: 00 IA 64 sp1 不适用
Wseclogon.dll 5.2.3790.2938 18,944 2007 年五月 17 日 05: 00 x86 sp1

Windows Server 2003 与 Service Pack 2,基于 Itanium 的版本
文件的名称 文件版本 文件大小 日期 时间 平台 SP 要求 服务分支
Seclogon.dll 5.2.3790.4083 48,128 2007 年五月 17 日 05: 05 IA 64 sp2 不适用
Wseclogon.dll 5.2.3790.4083 18,432 2007 年五月 17 日 05: 05 x86 sp2

x 基于 x64 的版本的 Windows Server 2003
文件的名称 文件版本 文件大小 日期 时间 平台 SP 要求 服务分支
Seclogon.dll 5.2.3790.2938 28,160 2007 年五月 17 日 05: 00 x64 sp1 不适用
Wseclogon.dll 5.2.3790.2938 18,944 2007 年五月 17 日 05: 00 x86 sp1

Windows Server 2003 与 x 基于 x64 的版本的 Service Pack 2
文件的名称 文件版本 文件大小 日期 时间 平台 SP 要求 服务分支
Seclogon.dll 5.2.3790.4083 28,160 2007 年五月 17 日 05: 05 x64 sp2 不适用
Wseclogon.dll 5.2.3790.4083 18,432 2007 年五月 17 日 05: 05 x86 sp2

替代方法

要变通解决此问题,限制环境变量所使用的字符少于 5,120 用户帐户。

状态

Microsoft 已经确认这是在”适用于”一节中列出的 Microsoft 产品中的问题。

更多信息

根据对 Microsoft 开发人员网络文档进程的环境块的总大小不能超过 32,767 个字符。有关详细的信息,请访问下面的 Microsoft 网站:

有关用于描述 Microsoft 软件更新的标准术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

824684   用于描述 Microsoft 软件更新的标准术语的说明


这篇文章中的信息适用于:
  • Microsoft Windows Server 2003 Service Pack 1 当用于
    • Microsoft Windows Server 2003 Standard Edition
    • Microsoft Windows Server 2003 Web Edition
    • Microsoft Windows Server 2003, Enterprise x64 Edition
    • Microsoft Windows Server 2003 Datacenter Edition
    • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
    • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
  • Microsoft Windows Server 2003 Service Pack 2 当用于
    • Microsoft Windows Server 2003 Standard Edition
    • Microsoft Windows Server 2003 Web Edition
    • Microsoft Windows Server 2003 Enterprise Edition
    • Microsoft Windows Server 2003 Datacenter Edition
    • Microsoft Windows Server 2003, Standard x64 Edition
    • Microsoft Windows Server 2003, Enterprise x64 Edition
    • Microsoft Windows Server 2003, Datacenter x64 Edition
    • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
    • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
  • Microsoft Windows Server 2003, Standard x64 Edition
  • Microsoft Windows Server 2003, Enterprise x64 Edition
  • Microsoft Windows Server 2003, Datacenter x64 Edition
  • Microsoft Windows XP Professional x64 Edition
关键字: 
kbmt kbautohotfix kbexpertiseinter kbwinserv2003postsp2fix kbbug kbfix kbhotfixserver kbqfe kbpubtypekc KB935761 KbMtzh

jquery设置元素的readonly和disabled

Jquery的api中提供了对元素应用disabled和readonly属性的方法,在这里记录下。如下:
 1.readonly
    $(‘input’).attr(“readonly”,”readonly”)//将input元素设置为readonly
    $(‘input’).removeAttr(“readonly”);//去除input元素的readonly属性
    if($(‘input’).attr(“readonly”)==true)//判断input元素是否已经设置了readonly属性

    对于为元素设置readonly属性和取消readonly属性的方法还有如下两种:
    $(‘input’).attr(“readonly”,true)//将input元素设置为readonly
    $(‘input’).attr(“readonly”,false)//去除input元素的readonly属性

    $(‘input’).attr(“readonly”,”readonly”)//将input元素设置为readonly
    $(‘input’).attr(“readonly”,””)//去除input元素的readonly属性

 2.disabled
 

    $(‘input’).attr(“disabled”,”disabled”)//将input元素设置为disabled
    $(‘input’).removeAttr(“disabled”);//去除input元素的disabled属性
  
    if($(‘input’).attr(“disabled”)==true)//判断input元素是否已经设置了disabled属性

  对于为元素设置disabled属性和取消disabled属性的方法还有如下两种:
    $(‘input’).attr(“disabled”,true)//将input元素设置为disabled
    $(‘input’).attr(“disabled”,false)//去除input元素的disabled属性

    $(‘input’).attr(“disabled”,”disabled”)//将input元素设置为disabled
    $(‘input’).attr(“disabled”,””)//去除input元素的disabled属性

ImageView.ScaleType8种用法

1·ImageView.ScaleType.center:图片位于视图中间,但不执行缩放。

2·ImageView.ScaleType.CENTER_CROP 按统一比例缩放图片(保持图片的尺寸比例)便于图片的两维(宽度和高度)等于或者大于相应的视图的维度

3·ImageView.ScaleType.CENTER_INSIDE按统一比例缩放图片(保持图片的尺寸比例)便于图片的两维(宽度和高度)等于或者小于相应的视图的维度

4·ImageView.ScaleType.FIT_CENTER缩放图片使用center

5·ImageView.ScaleType.FIT_END缩放图片使用END

6·ImageView.ScaleType.FIT_START缩放图片使用START

7·ImageView.ScaleType.FIT_XY缩放图片使用XY

8·ImageView.ScaleType.MATRIX当绘制时使用图片矩阵缩放