Java开发中的加密、解密、签名、验签,密钥,证书(上篇)
OpenSSL和keytool先说一下两个重要的工具
- OpenSSL:OpenSSL整个软件包大概可以分成三个主要的功能部分:SSL协议库libssl、应用程序命令工具以及密码算法库libcrypto 。 它使用标准的文件格式(PEM/CER/CRT/PKCS等)存储密钥和证书信息 。
- keytool:是密钥和证书管理工具 。 它出自于Java体系 , 它使用KeyStore来管理密钥和证书 。
当然OpenSSL还具备其他功能比如作为SSL的客户端和服务器 , 这是keytool所不具备的 。
对称加密采用单钥密码系统的加密方法 , 同一个密钥可以同时用作信息的加密和解密 , 这种加密方法称为对称加密 , 也称为单密钥加密 。 ——百度百科
对称加密算法的特点
- 加密和解密使用同样的密钥
- 计算速度快 , 适用于对大量数据加密处理
- 安全性取决于算法 , 也取决于密钥的管理 , 一旦密钥泄漏 , 数据则暴露无遗
常见的对称加密算法算法 描述 DES(Data Encryption Standard) 数据加密标准 , 速度较快 , 适用于加密大量数据 3DES(Triple DES) 基于DES , 对一块数据用三个不同的密钥进行三次加密 , 强度更高 AES(Advanced Encryption Standard) 高级加密标准 , 速度快 , 安全级别高 , 支持128、192、256、512位密钥的加密 Blowfish 速度快且安全 , 而且没有专利和商业限制 。 了解更多>>
OpenSSL实现对称加密
OpenSSL> enc --helpusage: enc -ciphername [-AadePp] [-base64] [-bufsize number] [-debug][-in file] [-iv IV] [-K key] [-k password][-kfile file] [-md digest] [-none] [-nopad] [-nosalt][-out file] [-pass arg] [-S salt] [-salt] -AProcess base64 data on one line (requires -a) -aPerform base64 encoding/decoding (alias -base64) -bufsize sizeSpecify the buffer size to use for I/O -dDecrypt the input data -debugPrint debugging information -eEncrypt the input data (default) -in fileInput file to read from (default stdin) -iv IVIV to use, specified as a hexadecimal string -K keyKey to use, specified as a hexadecimal string -md digestDigest to use to create a key from the passphrase -noneUse NULL cipher (no encryption or decryption) -nopadDisable standard block padding -out fileOutput file to write to (default stdout) -PPrint out the salt, key and IV used, then exit(no encryption or decryption is performed) -pPrint out the salt, key and IV used -pass sourcePassword source -S saltSalt to use, specified as a hexadecimal string -saltUse a salt in the key derivation routines (default) -vVerbose
命令选项 描述 -in file 被加密文件的全路径 -out file 加密后内容输出的文件路径 -salt 自动插入一个随机数作为文件内容加密 , 默认选项 -e 加密模式 , 默认 -d 解密模式 , 需要与加密算法一致 -a 使用-base64位编码格式 , 也可使用-base64 -pass source 指定密码的输入方式 , 共有五种方式:命令行输入(stdin)、文件输入(file)、环境变量输入(var)、文件描述符输入(fd)、标准输入(stdin) 。 默认是标准输入即从键盘输入只对文件进行base64编码 , 而不使用加解密
/*对文件进行base64编码*/openssl enc -base64 -in plain.txt -out base64.txt/*对base64格式文件进行解密操作*/openssl enc -base64 -d -in base64.txt -out plain2.txt/*使用diff命令查看可知解码前后明文一样*/diff plain.txt plain2.txt
不同方式的密码输入方式/*命令行输入 , 密码123456*/openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass pass:123456/*文件输入 , 密码123456*/echo 123456 > passwd.txtopenssl enc -aes-128-cbc -in plain.txt -out out.txt -pass file:passwd.txt/*环境变量输入 , 密码123456*/passwd=123456export passwdopenssl enc -aes-128-cbc -in plain.txt -out out.txt -pass env:passwd/*从文件描述输入*/ openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass fd:1/*从标准输入输入*/ openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass stdin
Java实现对称加密DES/** * 生成 DES 算法密钥 * @return byte[] * @throws Exception */public static byte[] generateDESKey() throws Exception {KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");// must be equal to 56keyGenerator.init(56);SecretKey secretKey = keyGenerator.generateKey();byte[] encodedKey = secretKey.getEncoded();return encodedKey;}/** * DES加密 * @param encodedKey generateDESKey生成的密钥 * @param dataBytes byte[]形式的待加密数据 * @return byte[] * @throws Exception */public static byte[] encryptByDES(byte[] encodedKey, byte[] dataBytes) throws Exception {SecretKey secretKey = new SecretKeySpec(encodedKey, "DES");Cipher cipher = Cipher.getInstance("DES");cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte[] encryptedData = http://kandian.youth.cn/index/cipher.doFinal(dataBytes);return encryptedData;}/** * DES解密 * @param encodedKey generateDESKey生成的密钥 * @param encryptedData byte[]形式的待解密数据 * @return byte[] * @throws Exception */public static byte[] decryptByDES(byte[] encodedKey, byte[] encryptedData) throws Exception {SecretKey secretKey = new SecretKeySpec(encodedKey,"DES");Cipher cipher = Cipher.getInstance("DES");cipher.init(Cipher.DECRYPT_MODE, secretKey);byte[] decryptedData = http://kandian.youth.cn/index/cipher.doFinal(encryptedData);return decryptedData;}
- 黑莓(BB.US)盘前涨逾32%,将与亚马逊开发智能汽车数据平台|美股异动 | US
- 现状|程序员现状揭秘:平均年薪20.36万,Java人才需求量最大
- 开发自|不妥协不追随 Member’s Mark升级背后的“山姆哲学”
- 确认|三星确认正在开发“轻薄轻巧”的可折叠手机
- 脸上|那个被1亿锦鲤砸中的“信小呆”:失去工作后,脸上已无纯真笑容
- 推广|Josh Elman加盟苹果 负责开发者关系与软件推广工作
- 微信广告|小程序开发者看过来 流量变现倍增的秘籍来了!
- 夹缝|“互联网卖菜”背后:夹缝中的菜贩与巨头们的垄断
- 移植|开发者将移植ARM Mac的Linux系统 但需要得到资金支持
- GNOME|[图]GNOME启动Circle项目:进一步扩大开发者规模