前言动机:java作为一门开源的语言,尽管出现了非官方的如Spring,Hibernate这样的强大框架, 但是我觉得官方出品的一些东西还是有必要学习,因为只有掌握了这些最底层的
不被人注意的东西,我们才能在更高级的非官方东西中更好的学习他们,这就好比---内练一口气(jdk基础),-----才能 “外联 筋骨皮”
1. 加密这件事,首先肯定是为了安全,一些银行和保险公司的项目大多都是将加密后的数据储存到数据库,向来没有明文储存一说,不管采用何种方式,其底层原理我猜和jdk加密方式差不多,
我们来看看jdk'的方式;
String 被加密的Str=“我爱”;
BASE64Encoder encoder=new BASE64Encoder(); // BASE64Encoder sun(oracle)公司的 // 加密 String encodeSTR=encoder.encode(被加密的Str.getBytes()); System.out.println(">>jdk加密>>"+encodeSTR); // 解密 BASE64Decoder decoder=new BASE64Decoder(); System.out.println(">jdk 解码>>>"+new String(decoder.decodeBuffer(encodeSTR))) ;
************看起来很容易,所以这种很容易被破解******
来看第二种 apache公司的加密
Base64 base64=new Base64(); byte[] byteEncode= base64.encode(被加密的Str.getBytes()); System.out.println("Comonc-c加密>>"+new String(base64.encode(被加密的Str .getBytes()))); byte[] byteDecode = base64.decode(byteEncode); System.out.println("Comonc-c>解密>"+new String(byteDecode));**********暂时还没被破解的 bouncycastle对称加密 ****************
//生成key KeyGenerator keyGenerator=KeyGenerator.getInstance("DES"); keyGenerator.init(56); SecretKey secretKey=keyGenerator.generateKey(); byte[] bytes=secretKey.getEncoded(); //key转换 DESKeySpec desKeySpec=new DESKeySpec(bytes); SecretKeyFactory factory=SecretKeyFactory.getInstance("DES"); Key converSeKey=factory.generateSecret(desKeySpec); //加密 Cipher cipher=Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE,converSeKey); byte[] result=cipher.doFinal(EgStr.getBytes()); System.out.println(">>对称加密>"+ Hex.toHexString(result)); //解密 cipher.init(Cipher.DECRYPT_MODE,converSeKey); result=cipher.doFinal(result); System.out.println(">>对称解密>>"+new String(result));
******以下是maven地址***************
<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency> <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on --> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.54</version> </dependency>