如何对word本身进行信息隐藏,即把信息隐藏到word文档中,而不管文档中是否有内容?请高手指点

以前只了解一点对word内容进行信息隐藏,通过基于字符间距和字体与下划线颜色的方法,把诸如用户名和ip地址等信息隐藏到word 内容里面,但是这种方法,缺陷很大,可靠性不高,如果文档中字数过少或者没有字符时,将不能再隐藏信息。我想问的问题是有没有一种方法,直接讲信息隐藏在word本身,而不管文档中是否有内容,都可以隐藏信息。
补充一下,利用VSTO C# 来实现,请各位大侠指点

我这里给楼主提供一种参考方案:

【设置秘密】
1、通过记事本新建一个空白文本文件,保存为“设置秘密.vbs ”(注意不要保存成了“设置秘密.vbs.txt”,关键是要保证文件扩展名为“.vbs”,即VB脚本文件);

2、把下列代码粘贴到这个新建的脚本文件中:
Option Explicit

SetSecret "c:\Temp\docs\ABC.docx", "我的秘密", "这是我的秘密,谁也看不见!:)"
MsgBox "设置秘密成功!"

Sub SetSecret(strFileName, strSecretName, strSecretValue)

On Error Resume Next

Dim oWordApp, oDoc, oVariable
Set oWordApp = CreateObject("Word.Application")
Set oDoc = oWordApp.Documents.Open(strFileName)

For Each oVariable In oDoc.Variables
If oVariable.Name = strSecretName Then
oVariable.Value = strSecretValue
oDoc.Close True
oWordApp.Quit
Exit Sub
End If
Next

oDoc.Variables.Add strSecretName, strSecretValue

oDoc.Close True
oWordApp.Quit

Set oDoc = Nothing
Set oWordApp = Nothing

End Sub

3、修改代码开始处 SetSecret 后面的三个参数,分别为:用来隐藏秘密的Word文件名完整路径(比如"c:\Temp\docs\ABC.docx"),秘密的名称(比如"我的秘密"),秘密的内容(比如"这是我的秘密,谁也看不见!:)");

4、保存并关闭这个脚本文件,然后在资源管理器里面双击运行它,看到“设置秘密成功!”;

5、如果要设置多个秘密(设置在同一个文档或者多个文档中都行),只要重复步骤3,把文档名、秘密名称和秘密内容重新设置一下,保存后再次运行脚本即可。

【列出全部秘密】
1、按照上面的步骤创建一个新的脚本,取名为“列出全部秘密.vbs”,内容为:
Option Explicit

EnumSecrets "c:\Temp\docs\Blank.docx"

Sub EnumSecrets(strFileName)

On Error Resume Next

Dim oWordApp, oDoc, oVariable

Set oWordApp = CreateObject("Word.Application")
Set oDoc = oWordApp.Documents.Open(strFileName)

For Each oVariable In oDoc.Variables
MsgBox oVariable.Name & ": " & oVariable.Value
Next

oDoc.Close True
oWordApp.Quit

Set oDoc = Nothing
Set oWordApp = Nothing

End Sub

2、修改代码开始处 EnumSecrets 后面的参数为包含了秘密的Word文档完整路径;

3、保存并退出,运行这个脚本即可列举出指定文档里面包含的全部秘密;

4、如果想列举其它Word文件里面的秘密,重复步骤2,指定其他文件完整路径,保存后再次运行即可。

【删除秘密】
1、按照上面的步骤创建一个新的脚本,取名为“删除秘密.vbs”,内容为:
Option Explicit

RemoveSecret "c:\Temp\docs\Blank.docx", "我的秘密"
MsgBox "删除秘密成功!"

Sub RemoveSecret(strFileName, strSecretName)

On Error Resume Next

Dim oWordApp, oDoc, oVariable

Set oWordApp = CreateObject("Word.Application")
Set oDoc = oWordApp.Documents.Open(strFileName)

For Each oVariable In oDoc.Variables
If oVariable.Name = strSecretName Then
oVariable.Delete
Exit For
End If
Next

oDoc.Close True
oWordApp.Quit

Set oDoc = Nothing
Set oWordApp = Nothing

End Sub

2、修改代码开始处 RemoveSecret 后面的两个参数:包含秘密的Word文档完整路径,想要删除的秘密名称;

3、保存并关闭,然后运行这个脚本,看到“删除秘密成功!”;

4、如果要删除其他秘密(同一个文档或者其它文档),重复步骤2,指定其他的文档名或者秘密名称,保存后再次运行即可。

上述方案设置的隐藏信息,在Word文档正文中完全看不见,而且就算文档没有任何文字内容也没有关系。然而,只要想偷看秘密的人懂脚本以及Word文档变量的概念,那他/她也照样可以看到你通过这个方式隐藏的信息。

所以,如果真的不想让别人知道自己的秘密,那么最好还是对你的整个Word文档加密,通过密码来保护。但是,不幸的是,网上也有很多破解Word秘密的工具。

所以,似乎真的没有通过Word来一劳永逸地隐藏秘密的方法了……

__________________________
补充:

C#的做法其实基本类似。

在工程里面添加Word Interop的引用后,在代码中就可以通过Word对象模型来访问Application、Document、Variables等这些信息。这些访问对象模型的代码和我上面提供的VBS代码其实差异不大,只不过换成C#语法即可。

我这里只写一下设置秘密的大致代码,其它枚举秘密和删除秘密的代码相信楼主可以举一反三。

C#代码示例:
namespace ConsoleApplication2
{
using System;
using Microsoft.Office.Interop.Word;

class Program
{
static void Main()
{
SetSecret(@"c:\Temp\docs\Blank.docx", "我的秘密", "这是我的秘密,谁也看不见!");
}

static void SetSecret(string fileName, string secretName, string secretValue)
{
Application app = null;
Document doc = null;
object saveChanges = true;

try
{
app = new Application();
doc = app.Documents.Open(fileName);
Variable variable = doc.Variables[secretName] as Variable;
variable.Value = secretValue;
Console.WriteLine("设置秘密成功!");
}
catch
{
Console.WriteLine("设置秘密失败!");
}
finally
{
if (app != null)
{
app.Quit(ref saveChanges);
}
}
}
}
}
温馨提示:答案为网友推荐,仅供参考