运行:regsvr32 c:\windows\system32\hhctrl.ocx
package
des;
import
java.io.
*
;
import
java.nio.
*
;
import
java.nio.channels.FileChannel;
public
class
FileDES{
private
static
final
boolean
enc
=
true
;
//
加密
private
static
final
boolean
dec
=
false
;
//
解密
private
String srcFileName;
private
String destFileName;
private
String inKey;
private
boolean
actionType;
private
File srcFile;
private
File destFile;
private
Des des;
private
void
analyzePath(){
String dirName;
int
pos
=
srcFileName.lastIndexOf(
"
/
"
);
dirName
=
srcFileName.substring(
0
,pos);
File dir
=
new
File(dirName);
if
(
!
dir.exists()){
System.err.println(dirName
+
"
is not exist
"
);
System.exit(
1
);
}
else
if
(
!
dir.isDirectory()){
System.err.println(dirName
+
"
is not a directory
"
);
System.exit(
1
);
}
pos
=
destFileName.lastIndexOf(
"
/
"
);
dirName
=
destFileName.substring(
0
,pos);
dir
=
new
File(dirName);
if
(
!
dir.exists()){
if
(
!
dir.mkdirs()){
System.out.println (
"
can not creat directory:
"
+
dirName);
System.exit(
1
);
}
}
else
if
(
!
dir.isDirectory()){
System.err.println(dirName
+
"
is not a directory
"
);
System.exit(
1
);
}
}
private
static
int
replenish(FileChannel channel,ByteBuffer buf)
throws
IOException{
long
byteLeft
=
channel.size()
-
channel.position();
if
(byteLeft
==
0L
)
return
-
1
;
buf.position(
0
);
buf.limit(buf.position()
+
(byteLeft
<
8
?
(
int
)byteLeft :
8
));
return
channel.read(buf);
}
private
void
file_operate(
boolean
flag){
des
=
new
Des(inKey);
FileOutputStream outputFile
=
null
;
try
{
outputFile
=
new
FileOutputStream(srcFile,
true
);
}
catch
(java.io.FileNotFoundException e) {
e.printStackTrace(System.err);
}
FileChannel outChannel
=
outputFile.getChannel();
try
{
if
(outChannel.size()
%
2
!=
0
){
ByteBuffer bufTemp
=
ByteBuffer.allocate(
1
);
bufTemp.put((
byte
)
32
);
bufTemp.flip();
outChannel.position(outChannel.size());
outChannel.write(bufTemp);
bufTemp.clear();
}
}
catch
(Exception ex){
ex.printStackTrace(System.err);
System.exit(
1
);
}
FileInputStream inFile
=
null
;
try
{
inFile
=
new
FileInputStream(srcFile);
}
catch
(java.io.FileNotFoundException e){
e.printStackTrace(System.err);
//
System.exit(1);
}
outputFile
=
null
;
try
{
outputFile
=
new
FileOutputStream(destFile,
true
);
}
catch
(java.io.FileNotFoundException e) {
e.printStackTrace(System.err);
}
FileChannel inChannel
=
inFile.getChannel();
outChannel
=
outputFile.getChannel();
ByteBuffer inBuf
=
ByteBuffer.allocate(
8
);
ByteBuffer outBuf
=
ByteBuffer.allocate(
8
);
try
{
String srcStr;
String destStr;
while
(
true
){
if
(replenish(inChannel,inBuf)
==-
1
)
break
;
srcStr
=
((ByteBuffer)(inBuf.flip())).asCharBuffer().toString();
inBuf.clear();
if
(flag)
destStr
=
des.enc(srcStr,srcStr.length());
else
destStr
=
des.dec(srcStr,srcStr.length());
outBuf.clear();
if
(destStr.length()
==
4
){
for
(
int
i
=
0
; i
<
4
; i
++
) {
outBuf.putChar(destStr.charAt(i));
}
outBuf.flip();
}
else
{
outBuf.position(
0
);
outBuf.limit(
2
*
destStr.length());
for
(
int
i
=
0
; i
<
destStr.length(); i
++
) {
outBuf.putChar(destStr.charAt(i));
}
outBuf.flip();
}
try
{
outChannel.write(outBuf);
outBuf.clear();
}
catch
(java.io.IOException ex) {
ex.printStackTrace(System.err);
}
}
System.out.println (inChannel.size());
System.out.println (outChannel.size());
System.out.println (
"
EoF reached.
"
);
inFile.close();
outputFile.close();
}
catch
(java.io.IOException e){
e.printStackTrace(System.err);
System.exit(
1
);
}
}
public
FileDES(String srcFileName,String destFileName,String inKey,
boolean
actionType){
this
.srcFileName
=
srcFileName;
this
.destFileName
=
destFileName;
this
.actionType
=
actionType;
analyzePath();
srcFile
=
new
File(srcFileName);
destFile
=
new
File(destFileName);
this
.inKey
=
inKey;
if
(actionType
==
enc)
file_operate(enc);
else
file_operate(dec);
}
public
static
void
main(String[] args){
String file1
=
System.getProperty(
"
user.dir
"
)
+
"
/111.doc
"
;
String file2
=
System.getProperty(
"
user.dir
"
)
+
"
/222.doc
"
;
String file3
=
System.getProperty(
"
user.dir
"
)
+
"
/333.doc
"
;
String passWord
=
"
1234ABCD
"
;
FileDES fileDes
=
new
FileDES(file1,file2,passWord,
true
);
FileDES fileDes1
=
new
FileDES(file2,file3,passWord,
false
);
}