安企神电脑监控软件 在线试用
扫码咨询客服
安企神电脑监控软件、局域网监控软件
首页
功能对比
下载中心
购买咨询
客户列表
关于安企神

DES对称加密:Java和.NET使用的区别

更新时间:2022-10-28 15:42:00


本文简介:Java和.NET的系统类库里都有封装DES对称加密的实现方式,但是对外暴露的接口却各不相同,甚至有时会让自己难以解决其中的问题,比如Java加密后的结果在.NET中解密不出来等,由于最近项目有跨Java和.NET的加解密,经过我的分析调试,终于让它们可以互相加密解密了。DES加密DES是一种对称加密(Data Encryption Standard)算法,以前我写过一篇文章:.NET中加密解密相

DES对称加密:Java和.NET使用的区别

Java和.NET的系统类库里都有封装DES对称加密的实现方式,但是对外暴露的接口却各不相同,甚至有时会让自己难以解决其中的问题,比如Java加密后的结果在.NET中解密不出来等,由于最近项目有跨Java和.NET的加解密,经过我的分析调试,终于让它们可以互相加密解密了。

DES加密

DES是一种对称加密(Data Encryption Standard)算法,以前我写过一篇文章:.NET中加密解密相关知识,有过简单描述。

DES算法一般有两个关键点,第一个是加密算法,第二个是数据补位。

加密算法常见的有ECB模式和CBC模式:

ECB模式:电子密本方式,这是Java封装的DES算法的默认模式,就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,则补足8个字节(注意:这里就涉及到数据补位了)进行计算,之后按照顺序将计算所得的数据连在一起即可,各段数据之间互不影响。

CBC模式:密文分组链接方式,这是.NET封装的DES算法的默认模式,它比较麻烦,加密步骤如下:

1、首先将数据按照8个字节一组进行分组得到D1D2……Dn(若数据不是8的整数倍,就涉及到数据补位了)

2、第一组数据D1与向量I异或后的结果进行DES加密得到第一组密文C1(注意:这里有向量I的说法,ECB模式下没有使用向量I)

3、第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2

4、之后的数据以此类推,得到Cn

5、按顺序连为C1C2C3……Cn即为加密结果。

数据补位一般有NoPadding和PKCS7Padding(Java中是PKCS5Padding)填充方式,PKCS7Padding和PKCS5Padding实际只是协议不一样,根据相关资料说明:PKCS5Padding明确定义了加密块是8字节,PKCS7Padding加密快可以是1-255之间。但是封装的DES算法默认都是8字节,所以可以认为他们一样。数据补位实际是在数据不满8字节的倍数,才补充到8字节的倍数的填充过程。

NoPadding填充方式:算法本身不填充,比如.NET的padding提供了有None,Zeros方式,分别为不填充和填充0的方式。

PKCS7Padding(PKCS5Padding)填充方式:为.NET和Java的默认填充方式,对加密数据字节长度对8取余为r,如r大于0,则补8-r个字节,字节为8-r的值;如果r等于0,则补8个字节8.比如:

加密字符串为为AAA,则补位为AAA55555;加密字符串为BBBBBB,则补位为BBBBBB22;加密字符串为CCCCCCCC,则补位为CCCCCCCC88888888.

.NET中的DES加密

对于.NET,框架在System.Security.Cryptography命名空间下提供了DESCryptoServiceProvider作为System.Security.Cryptography.DES加密解密的包装接口,它提供了如下的4个方法:

public override ICryptoTransform CreateDecryptor(byte[] rgbKey, byte[] rgbIV)

public override ICryptoTransform CreateEncryptor(byte[] rgbKey, byte[] rgbIV)

public override void GenerateIV()

public override void GenerateKey()

从.NET类库封装情况,加解密需要传入一个Key和IV向量。而且Key必须为8字节的数据,否则会直接抛异常出来,当使用ECB模式下,不管传入什么IV向量,加密结果都一样。示例代码如下:

public static string EncryptWithJava(string key, string str)

{

if (key.Length < 8 || string.IsNullOrEmpty(str))

{

throw new Exception("加密key小于8或者加密字符串为空!");

}

byte[] bKey = Encoding.UTF8.GetBytes(key.Substring(0, 8));

byte[] bIV = IV;

byte[] bStr = Encoding.UTF8.GetBytes(str);

try

{

DESCryptoServiceProvider desc = new DESCryptoServiceProvider();

desc.Padding = PaddingMode.PKCS7;//补位

desc.Mode = CipherMode.ECB;//CipherMode.CBC

using (MemoryStream mStream = new MemoryStream())

{

using (CryptoStream cStream = new CryptoStream(mStream, desc.CreateEncryptor(bKey, bIV), CryptoStreamMode.Write))

{

cStream.Write(bStr, 0, bStr.Length);

cStream.FlushFinalBlock();

StringBuilder ret = new StringBuilder();

byte[] res = mStream.ToArray();

foreach (byte b in res)

{

ret.AppendFormat("{0:x2}", b);

}

return ret.ToString();

}

}

}

catch

{

return string.Empty;

}

}

由于为ECB模式,因此IV这里设置什么值都是可以的,当为CBC模式下,则需要设置为其他值,比如:public static byte[] IV = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 },才能正常加密解密。

Java中的DES加密

Java的Javax.crypto.Cipher包下,提供了加密解密的功能,它的静态getInstance方法,可以返回一个Cipher对象,一般有public static final Cipher getInstance(String transformation)方法,transformation为:algorithm/mode/padding,分别表示算法名称,比如DES,也可以在后面包含算法模式和填充方式,但也可以只是算法名称,如为:"DES/CBC/PKCS5Padding","DES"等。Java中默认的算法为ECB,默认填充方式为PKCS5Padding.Cipher的Init方法用来初始化加密对象,常见的有:

public final void init(int opmode, Key key, AlgorithmParameterSpec params)

public final void init(int opmode,Key key, SecureRandom random)

用SecureRandom时,一般用于不需要IV的算法模式,示例代码如下:

public static String encrypt2(String src) throws Exception {

SecureRandom sr = new SecureRandom();

DESKeySpec ks = new DESKeySpec(KEY.getBytes("UTF-8"));

SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");

SecretKey sk = skf.generateSecret(ks);

Cipher cip = Cipher.getInstance("DES/CBC/PKCS5Padding");//Cipher.getInstance("DES");

IvParameterSpec iv2 = new IvParameterSpec(IV);

cip.init(Cipher.ENCRYPT_MODE, sk, iv2);//IV的方式

//cip.init(Cipher.ENCRYPT_MODE, sk, sr);//没有传递IV

String dest = byteToHex(cip.doFinal(src.getBytes("UTF-8")));

return dest;

}

当默认用DES,Java会用ECB模式,因此这里IV向量没有作用,这里,但当用CBC模式下,如果还是用SecureRandom,则每次加密的结果都会不一样,因为Java内部会用随机的IV来初始化Cipher对象,如示例代码,由于Cipher.getInstance("DES/CBC/PKCS5Padding")使用了CBC,因此我这里用的Javax.crypto.spec.IvParameterSpec包下的IvParameterSpec来初始化向量IV:

Private final static byte[] IV = new byte[] {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};

总结

对于.NET和Java在使用DES对称加密时,需要大家指定一样的算法和填充模式,并且Java在写DES加解密算法时,还需要根据创建Cipher对象的不同,正确使用IV向量。在不同系统需要互相数据时,必须要明确的是加密算法,Key和算法模式,再根据不同模式是否需要IV向量,最后是填充模式。

立即下载试用

如何加密电脑文档,电脑加密软件哪个最好用

如何加密电脑文档,电脑加密软件哪个最好用

不久前,一家知名科技公司的核心研发文件被非法泄露,给公司造成了巨大的经济损失。据调查发现,这是由一名离职员工在离职前通过非法手段获取文件,并将其出售给外部人员所致。这起事件不仅给公司带来巨大的经济损失,更暴露了公司在内部文件保护方面的漏洞。那么、企业在文件保护方面应该怎么做呢?

如何加密电脑文档,电脑加密软件哪个最好用

一、解决方案:

在如今信息高度流通、竞争激烈的商业环境中,保护企业核心数据的重要性不言而喻。我们可以使用专业数据数据加密软件对企业数据进行加密保护,通过加密软件,企业可以对重要的文件和数据进行加密,确保只有授权的人员可以访问和使用这些信息。这样可以有效减少泄露风险,保护企业核心数据的安全。

如何加密电脑文档,电脑加密软件哪个最好用

二、电脑加密软件哪个最好用?

安企神软件以其高效的加密功能和简洁的操作界面受到用户的喜爱。它支持多种加密算法,并提供了灵活的加密设置选项,能够满足不同用户的需求。

安企神软件作为一款国内知名的电脑加密软件,该具有强大的文件加密功能,可以对文件夹、文件进行全盘加密,有效防止数据泄露。

软件采用了先进的透明加密模式,日常使用无感知,但当被非法外发到企业外部电脑后,会自动变成乱码无法使用状态。

如何加密电脑文档,电脑加密软件哪个最好用

三、软件是如何加密电脑文档的

安企神软件通过以下方式加密电脑文档,从而保障数据的安全性:

1、透明无感知加密: 软件采用透明无感知加密技术,即在打开或编辑指定文件时,系统会自动对未加密的文件进行加密,对已加密的文件自动解密。用户在操作过程中无需额外操作,加密过程对用户是透明的,不会改变用户的正常工作习惯和文件使用方式。

2、精细的权限管理: 管理员可以为不同用户或用户组设置不同的文件访问权限,确保只有授权人员能够访问和使用加密文件。这有助于防止未经授权的访问和数据泄露。

3、批量加密与一键操作: 一旦加密策略配置完成,管理员可以通过安企神软件的管理端一键触发批量加密操作。软件将自动扫描企业局域网中所有电脑上的文件,并按照预设的策略进行加密。这大大提高了加密操作的效率和便捷性。

如何加密电脑文档,电脑加密软件哪个最好用

4、审计与追踪功能: 安企神软件能够实时记录文件的加密操作、访问历史以及修改、删除等操作,为管理员提供全面的审计和追踪功能。这有助于管理员及时发现异常行为并采取相应措施,确保数据的安全性。

5、防拷贝与防截图功能: 为防止文件内容被非法复制或截图,安企神软件提供防拷贝和防截图功能。这确保了即使文件被非法获取,其内容也不会被轻易泄露。

6、自动备份与恢复: 软件支持定期备份加密文件,以防数据丢失或损坏。同时,它也提供快速恢复功能,确保在紧急情况下能够迅速恢复文件,减少因数据丢失带来的损失。

如何加密电脑文档,电脑加密软件哪个最好用

四、总结

总的来说,加密电脑文档是保护数据安全的重要措施之一,安企神软件通过其强大的加密功能和丰富的安全管理特性,为用户提供了一个全面、高效的电脑文档加密解决方案。这有助于保护用户的数据安全,防止未经授权的访问和数据泄露。


本文为收集整理,文章部分观点不代表本站观点,如有侵权或其它问题请反馈客服。https://www.wgj7.com/cjwt/16166.html