加密与安全——口令加密算法

上一节我们讲的AES加密,细心的童鞋可能会发现,密钥长度是固定的128/192/256位,而不是我们用WinZip/WinRAR那样,随便输入几位都可以。

这是因为对称加密算法决定了口令必须是固定长度,然后对明文进行分块加密。又因为安全需求,口令长度往往都是128位以上,即至少16个字符。

但是我们平时使用的加密软件,输入6位、8位都可以,难道加密方式不一样?

实际上用户输入的口令并不能直接作为AES的密钥进行加密(除非长度恰好是128/192/256位),并且用户输入的口令一般都有规律,安全性远远不如安全随机数产生的随机口令。因此,用户输入的口令,通常还需要使用PBE算法,采用随机数杂凑计算出真正的密钥,再进行加密。

PBE就是Password Based Encryption的缩写,它的作用如下:

key = generate(userPassword, secureRandomPassword);

PBE的作用就是把用户输入的口令和一个安全随机的口令采用杂凑后计算出真正的密钥。以AES密钥为例,我们让用户输入一个口令,然后生成一个随机数,通过PBE算法计算出真正的AES口令,再进行加密,代码如下:

public class Main {
    public static void main(String[] args) throws Exception {
        // 把BouncyCastle作为Provider添加到java.security:
        Security.addProvider(new BouncyCastleProvider());
        // 原文:
        String message = "Hello, world!";
        // 加密口令:
        String password = "hello12345";
        // 16 bytes随机Salt:
        byte[] salt = SecureRandom.getInstanceStrong().generateSeed(16);
        System.out.printf("salt: %032x\n", new BigInteger(1, salt));
        // 加密:
        byte[] data = message.getBytes("UTF-8");
        byte[] encrypted = encrypt(password, salt, data);
        System.out.println("encrypted: " + Base64.getEncoder().encodeToString(encrypted));
        // 解密:
        byte[] decrypted = decrypt(password, salt, encrypted);
        System.out.println("decrypted: " + new String(decrypted, "UTF-8"));
    }

    // 加密:
    public static byte[] encrypt(String password, byte[] salt, byte[] input) throws GeneralSecurityException {
        PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray());
        SecretKeyFactory skeyFactory = SecretKeyFactory.getInstance("PBEwithSHA1and128bitAES-CBC-BC");
        SecretKey skey = skeyFactory.generateSecret(keySpec);
        PBEParameterSpec pbeps = new PBEParameterSpec(salt, 1000);
        Cipher cipher = Cipher.getInstance("PBEwithSHA1and128bitAES-CBC-BC");
        cipher.init(Cipher.ENCRYPT_MODE, skey, pbeps);
        return cipher.doFinal(input);
    }

    // 解密:
    public static byte[] decrypt(String password, byte[] salt, byte[] input) throws GeneralSecurityException {
        PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray());
        SecretKeyFactory skeyFactory = SecretKeyFactory.getInstance("PBEwithSHA1and128bitAES-CBC-BC");
        SecretKey skey = skeyFactory.generateSecret(keySpec);
        PBEParameterSpec pbeps = new PBEParameterSpec(salt, 1000);
        Cipher cipher = Cipher.getInstance("PBEwithSHA1and128bitAES-CBC-BC");
        cipher.init(Cipher.DECRYPT_MODE, skey, pbeps);
        return cipher.doFinal(input);
    }
}

使用PBE时,我们还需要引入BouncyCastle,并指定算法是PBEwithSHA1and128bitAES-CBC-BC。观察代码,实际上真正的AES密钥是调用Cipher的init()方法时同时传入SecretKey和PBEParameterSpec实现的。在创建PBEParameterSpec的时候,我们还指定了循环次数1000,循环次数越多,暴力破解需要的计算量就越大。

如果我们把salt和循环次数固定,就得到了一个通用的“口令”加密软件。如果我们把随机生成的salt存储在U盘,就得到了一个“口令”加USB Key的加密软件,它的好处在于,即使用户使用了一个非常弱的口令,没有USB Key仍然无法解密,因为USB Key存储的随机数密钥安全性非常高。

小结

PBE算法通过用户口令和安全的随机salt计算出Key,然后再进行加密;

Key通过口令和安全的随机salt计算得出,大大提高了安全性;

PBE算法内部使用的仍然是标准对称加密算法(例如AES)。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
浅谈办公网络安全——病毒防治 随着信息化的不断扩展,办公网络在提高数据传输效率、实现数据集中、数据共享 等方面发挥着越来越重要的作用。办公网络安全是办公系统软硬件正常顺利运行的基本 前提,因此办公网络安全建设在确保各项工作安全有效地进行过程中更显得尤为重要。 一、计算机网络安全的概念 国际标准化组织将"计算机安全"定义为:为数据处理系统建立和采取的技术和管理 的安全保护,保护计算机硬件、软件数据不因偶然和恶意的原因而遭到破坏、更改和泄 漏。上述计算机安全的定义包含物理安全和逻辑安全两方面的内容,其逻辑安全的内容 可理解是指对信息的保密性、完整性和可用性的保护,而网络安全性的含义是对网络信 息保密性、完整性和可用性的保护。从本质上来讲,网络安全包括组成网络系统的硬件 、软件及其在网络上传输信息的安全性,使其不致因偶然的或者恶意的攻击遭到破坏, 网络安全既有技术方面的问题,也有管理方面的问题,两方面缺一不可。 二、常见办公网络安全问题 办公网络是指在小范围内由服务器和多台电脑组成的工作组互联网络。由于通过交 换机和服务器连接网内每一台电脑,因此办公网内信息的传输速率比较高,同时采用的 技术比较简单,安全措施较少,给病毒传播提供了有效的通道和数据信息的安全埋下了 隐患。 (一)网络病毒的传播与感染 随着计算机和网络的发展,计算机病毒也不断涌现,其破环性也不断增强,而网络 病毒破坏性就更强。如果服务器的硬盘被病毒感染,就可能造成系统损坏、数据丢失, 使网络服务器无法起动,应用程序和数据无法正确使用,甚至导致整个网络瘫痪。网络 病毒普遍具有较强的再生机制,可以通过网络扩散与传染。 (二)数据破坏 在办公网络中,有多种因素可能导致数据的破坏。 首先是黑客侵入,黑客基于各种原因侵入网络,恶意侵入对网络的危害可能是多方 面的,其中一种危害就是破坏数据,可能破坏服务器硬盘引导区数据、删除或覆盖原始 数据库、破坏应用程序数据等。 其次是病毒破坏,病毒可能攻击系统数据区,包括硬盘主引导扇区、Boot扇区、FA T表、文件目录等;病毒还可能攻击文件数据区,使文件数据被删除、改名、替换、丢失 数据文件。 第三是灾难破坏,由于自然灾害、突然停电、强烈震动等造成数据破坏。 三、办公网络的安全防范措施 针对办公网络常见的安全问题,可运用以下安全措施解决: (一)病毒防治 病毒的侵入必将对系统资源构成威胁,影响系统的正常运行,特别是通过网络传播 的病毒,能在很短的时间内使整个计算机网络处于瘫痪状态,从而造成巨大的损失。因 此,防止病毒的侵入要比发现和消除病毒更重要。防毒的关键是对病毒行为的判断,如 何有效辨别病毒行为与正常程序行为是防毒成功与否的重要因素。主要从以下几方面制 定有针对性的防病毒措施: 1.加强办公网络管理人员及使用人员的安全意识。很多计算机系统常用口令来控制 对系统资源的访问,这是防病毒最容易和最经济的方法之一。使用人员根据自己的职责 权限,选择不同的口令,对应用程序数据进行合法操作,防止用户越权访问数据和使用 网络资源。对办公网络使用人员明确病毒的危害,文件共享的时候尽量控制权限和增加 密码,对来历不明的文件运行前进行查杀等,这些措施对杜绝病毒起到很重要的作用。 2.加强对移动存储设备的管理。在使用移动存储设备之前进行病毒的扫描和查杀, 也可把病毒拒绝在外。 3.严格挑选网络版杀毒软件。查杀是否彻底,界面是否友好、方便,能否实现远程 控制、集中管理是决定一个网络杀毒软件的三大要素,有效使用杀毒软件是防毒杀毒的关 键。 (二)网络防火墙技术 防火墙是网络安全的屏障,配置防火墙是实现网络安全最基本、最经济、最有效的 安全措施之一。防火墙是指一个由软件或和硬件设备组合而成,处于办公网络群体计算 机与外界通道之间,限制外界用户对办公网络访问及管理内部用户访问外界网络的权限 。防火墙过滤不安全的服务从而降低风险。它对两个或多个网络之间传输的数据包如链 接方式按照一定的安全防范措施来实施检查,以决定网络之间的通信是否被允许,并监 视网络运行状态。 (三)安全加密技术 信息加密的目的是保护网内的数据、文件、口令和控制信息,保护网上传输的数据 。信息加密过程是由形形色色的加密算法来具体实施,它以很小的代价提供很大的安全 保护。如果按照收发双方密钥是否相同来分类,可以将这些加密算法分为常规密码算法 和公钥密码算法。 1.常规密码。收信方和发信方使用相同的密钥,即加密密钥和解密密钥是相同或等 价的。其优点是有很强的保密强度,且经受住时间的检验和攻击,但其密钥必须通过安 全的途径传送。因此,其密钥管理成为系统安全的重要因素。 2.公钥密码。收信方和发信方使用的密钥互不相同,而且几乎不可能从加密密钥推 导出解密密钥。其优点是可以适应网络的开放性要求,且密钥管理问题也

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值