精华内容
下载资源
问答
  • c# 对称加密算法 例子

    2008-10-24 14:28:26
    c# 对称加密算法 例子~~~~~~~~~~~~~~ http://www.dotnetdev.cn
  • RSA加密算法-Java实现,随机生产秘钥对,由公钥对内容进行加密,私钥解密。
  • 对称加密算法与非对称加密算法的区别 对称加密算法 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文...
    对称加密算法与非对称加密算法的区别
    对称加密算法
    对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。
    对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。在计算机专网系统中广泛使用的对称加密算法有DES、IDEA和AES。

    不对称加密算法
    不对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。不对称加密算法的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。显然,采用不对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。由于不对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。广泛应用的不对称加密算法有RSA算法和美国国家标准局提出的DSA。以不对称加密算法为基础的加密技术应用非常广泛。
    来自:http://blog.712100.com/23611/viewspace-16217
    个人理解与总结:
    1、基于DES加密算法理解对称加密算法
    从DES加密算法可以体会到:对称加密算法在对数据进行加密和解密的过程中,都是使用了数据接收方的密钥(公钥和私钥),具体做法就是,数据发送方使用接受方的公钥加密数据,而数据接收方使用自己的私钥机密数据,其实围绕的就是数据接收方的密钥。
    2、基于RSA加密算法理解非对称加密算法
    通过上面对非对称加密算法的叙述,我感觉理解不是很深刻。总体的感觉就是:
    (1) 基于RSA加密算法比较麻烦,因为RSA加密算法是基于一个大数n的,需要计算出一个密钥对(公钥和私钥),但是这里公钥和私钥还是一对数,即公钥为(e,n),私钥为(e,d).
    (2) 在数据发送方与接受发执行数据传输之前,保证了双方公钥的分发管理,加强了公钥的安全性(比之于在对称加密算法中:公钥就是完全公开的),这个特点确实加强了加密数据的发送方的身份真实性。
    还有待于继续深入理解。
    展开全文
  • 对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yue)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。常用的对称加密算法:AES,RC4,3DES传输的示意图如下所示:如上图所示,此种...
    第一 对称加密:
    对称加密是指,加密方和解密方使用同样的秘钥来进行加密和解密。
    在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yue)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。常用的对称加密算法:AES,RC4,3DES

    传输的示意图如下所示:

    如上图所示,此种方式属于对称加密,双方拥有相同的密钥,信息得到安全传输,但此种方式的缺点是:

    (1)不同的客户端、服务器数量庞大,所以双方都需要维护大量的密钥,维护成本很高

    (2)因每个客户端、服务器的安全级别不同,密钥极易泄露

    这里举例一个使用DES算法来实现对称加密的例子:

    public class DESUtils {

    public byte[] initKey(){
    try {
    KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
    keyGenerator.init(56);
    SecretKey secretKey = keyGenerator.generateKey();
    return  secretKey.getEncoded();
    } catch (NoSuchAlgorithmException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    return null;
    }

    /**
      * @Method: encrypt
      * @Description: 加密算法
      * @param data 被加密字节数组
      * @param key  随机对称密钥
      * @return
      * 返回类型:byte[]
      */
    public byte[] encrypt(byte[] data,byte[] key){
    SecretKey secretKey = new SecretKeySpec(key, "DES");
    Cipher cipher;
    try {
    cipher = Cipher.getInstance("DES");
    cipher.init(Cipher.ENCRYPT_MODE, secretKey);
    return cipher.doFinal(data);
    } catch (Exception e) {
    e.printStackTrace();


    return null;
    }

    /**
      * @Method: decode
      * @Description: TODO
      * @param 被解密的字节数组
      * @param key 随机对称密钥(和加密密钥务必保持一致)
      * @return
      * 返回类型:byte[]
      */
    public byte[] decode(byte[] data,byte[] key){
    SecretKey secretKey = new SecretKeySpec(key, "DES");
    Cipher cipher;
    try {
    cipher = Cipher.getInstance("DES");
    cipher.init(Cipher.DECRYPT_MODE, secretKey);
    return cipher.doFinal(data);
    } catch (Exception e) {
    e.printStackTrace();


    return null;
    }

    测试代码为:

    public static void testDes(){
    DESUtils desUtils = new DESUtils();
    byte[] key = desUtils.initKey();   // 
    String originData = "123456";
    System.out.println("原始数据:"+originData);
    try {
    // 将原始数据转化为字符串
    byte[] arrayOrigin = originData.getBytes("utf-8");
    // 对原始数据进行加密
    byte[] encryption = desUtils.encrypt(arrayOrigin, key);
    // 通过BASE64Encoder转化处理
    String encryptionStr = new BASE64Encoder().encode(encryption);
    System.out.println("经过加密之后的字符串:"+encryptionStr);

    try {
    // 使用BASE64Decoder进行转化处理
    byte[] decoceOrigin = new BASE64Decoder().decodeBuffer(encryptionStr);
    // 使用DES进行解密操作
    byte[] decode = desUtils.decode(decoceOrigin, key);
    // 把字节数组转化为字符串
    String decodeStr = new String(decode,"utf-8");
    System.out.println("对加密字符串进行解密:"+decodeStr);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    运行结果如下:

    原始数据:123456
    经过加密之后的字符串:jaKOVkHJtOQ=
    对加密字符串进行解密:123456

    第二 、非对称加密:
    非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。非对称加密算法:RSA,DSA/DSS 

    如上图所示,客户端用公钥对请求内容加密,服务器使用私钥对内容解密,反之亦然,但上述过程也存在缺点:

    公钥是公开的(也就是黑客也会有公钥),所以第 ④ 步私钥加密的信息,如果被黑客截获,其可以使用公钥进行解密,获取其中的内容。

    实现非对称加密算法例子:

    public class AsymmetricEncryption {


    public static final String KEY_ALGORITHM = "RSA";
    /** 貌似默认是RSA/NONE/PKCS1Padding,未验证 */
    public static final String CIPHER_ALGORITHM = "RSA/ECB/PKCS1Padding";
    public static final String PUBLIC_KEY = "publicKey";
    public static final String PRIVATE_KEY = "privateKey";


    /** RSA密钥长度必须是64的倍数,在512~65536之间。默认是1024 */
    public static final int KEY_SIZE = 2048;


    public static final String PLAIN_TEXT = "hello world!";


    /**
    * @Method: generateKeyBytes
    * @Description: 首先产生一个公钥和私钥对,使用HashMap保存起来
    * @return 返回类型:Map<String,byte[]>
    */
    public static Map<String, byte[]> generateKeyBytes() {


    try {
    KeyPairGenerator keyPairGenerator = KeyPairGenerator
    .getInstance(KEY_ALGORITHM);
    keyPairGenerator.initialize(KEY_SIZE);
    KeyPair keyPair = keyPairGenerator.generateKeyPair();


    RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
    RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();


    Map<String, byte[]> keyMap = new HashMap<String, byte[]>();
    keyMap.put(PUBLIC_KEY, publicKey.getEncoded());
    keyMap.put(PRIVATE_KEY, privateKey.getEncoded());
    return keyMap;
    } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
    }
    return null;
    }


    /**
    * 还原公钥,X509EncodedKeySpec 用于构建公钥的规范

    * @param keyBytes
    * @return
    */
    public static PublicKey restorePublicKey(byte[] keyBytes) {
    X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(keyBytes);


    try {
    KeyFactory factory = KeyFactory.getInstance(KEY_ALGORITHM);
    PublicKey publicKey = factory.generatePublic(x509EncodedKeySpec);
    return publicKey;
    } catch (Exception e) {
    e.printStackTrace();
    }
    return null;
    }


    /**
    * 还原私钥,PKCS8EncodedKeySpec 用于构建私钥的规范

    * @param keyBytes
    * @return
    */
    public static PrivateKey restorePrivateKey(byte[] keyBytes) {
    PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(
    keyBytes);
    try {
    KeyFactory factory = KeyFactory.getInstance(KEY_ALGORITHM);
    PrivateKey privateKey = factory
    .generatePrivate(pkcs8EncodedKeySpec);
    return privateKey;
    } catch (Exception e) {
    e.printStackTrace();
    }
    return null;
    }


    /**
    * 加密,三步走。

    * @param key
    * @param plainText
    * @return
    */
    public static byte[] RSAEncode(PublicKey key, byte[] plainText) {


    try {
    Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
    cipher.init(Cipher.ENCRYPT_MODE, key);
    return cipher.doFinal(plainText);
    } catch (Exception e) {
    e.printStackTrace();
    }


    return null;
    }


    public static String RSADecode(PrivateKey key, byte[] encodedText) {


    try {
    Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
    cipher.init(Cipher.DECRYPT_MODE, key);
    return new String(cipher.doFinal(encodedText));
    } catch (Exception e) {
    e.printStackTrace();
    }
    return null;
    }

    }

    测试代码如下:

    public static void tesRSA(){
    Map<String, byte[]> keyMap = AsymmetricEncryption.generateKeyBytes();

    // 加密
    PublicKey publicKey = AsymmetricEncryption.restorePublicKey(keyMap.get(AsymmetricEncryption.PUBLIC_KEY));
    byte[] encodedText = AsymmetricEncryption.RSAEncode(publicKey, AsymmetricEncryption.PLAIN_TEXT.getBytes());
    String rsaString = new BASE64Encoder().encode(encodedText);
    System.out.println("RSA encoded: " + rsaString);

    PrivateKey privateKey = AsymmetricEncryption.restorePrivateKey(keyMap.get(AsymmetricEncryption.PRIVATE_KEY));
    System.out.println("RSA decoded: "+ AsymmetricEncryption.RSADecode(privateKey, encodedText));

    }

    运行结果如下所示:

    RSA encoded: e7wIyV32VtiJhiraQGIYxD2TKtC4O6dRJx0lgVuEUsjCTSjqNFmEVNlYmFzd3ohIiW67XyIfEzWD
    W9YFpFnDekRFLgeerh7c5gXMLVsVkf7k7XuTbiGmQOlOBUmL8VWpWVWTk8Rgn7Y+G7/dz9+DOEnH
    csMnssKC/MBM80Ad5Za+QHqgb6BdZNHjZYzWpDIztBEUf/yHWfkGhmJahxo6Ff6y8er/shiP+qL3
    hMJlw70TTGoGlrAWQqxUMYGPrv4IELi/iNSednXxo5bNNatJYke7FhKnuy8GEOWNH/K8Q52vl24L
    cururJGLEJR6Hn/oaGxnXQbs2Fzo3vUziDj1cQ==
    RSA decoded: hello world!

    第三 非对称和对称完美结合

    非对称加密既然也有缺陷,那我们就将对称加密,非对称加密两者结合起来,取其精华、去其糟粕,发挥两者的各自的优势:


    如上图所示

    (1)第 ③ 步时,客户端说:(咱们后续回话采用对称加密吧,这是对称加密的算法和对称密钥)这段话用公钥进行加密,然后传给服务器

    (2)服务器收到信息后,用私钥解密,提取出对称加密算法和对称密钥后,服务器说:(好的)对称密钥加密

    (3)后续两者之间信息的传输就可以使用对称加密的方式了

    这是个非常非常经典的数据传输过程,也是Https传输协议里面最经典的部分。也是把对称加密和非对称加密的作用发挥到了很好的地方。在https传输的过程中,如果单独只用对称加密,或者单独使用非对称加密都会出现问题。



    展开全文
  • 对称加密算法(Symmetric-key algorithm)和非对称加密算法(asymmetric key encryption algorithm)只不过就是密码学(cryptography)中的两种加密算法罢了,什么是算法,你就可以理解成为是一种规则吧,这种规则可以将...

    对称加密算法(Symmetric-key algorithm)和非对称加密算法(asymmetric key encryption algorithm)只不过就是密码学(cryptography)中的两种加密算法罢了,什么是算法,你就可以理解成为是一种规则吧,这种规则可以将信息从一种形式转变成另一种形式,不懂没关系,继续往下看。

    对称加密

    首先,让我们先从一个情景开始讲起,想当初我们在初中,高中,甚至于大学,每次考试都有人在试图如何更加隐蔽的作弊!那大家都想了什么方法呢?比如张三学习比李四好,李四就想在考试的时候让张三“帮助”一下自己,当然,他们俩不可能像我们平常对话一样说,第一题选A,第二题选B等等,为什么?因为监考老师明白他俩在谈论什么,也就是说这种沟通交流方式属于“明文”,所以李四就想:“我需要发明一种,只有我和张三明白的交流方式”,那李四做了什么呢?恩,李四去找张三说:“当我连续咳嗽三声的时候你看我,然后如果我摸了下左耳朵,说明你可以开始给我传答案了,如果没反应,那说明我真的是在咳嗽。。。。”, 然后,怎么传答案呢?很简单,“你摸左耳朵代表A, 摸右耳朵代表B,左手放下代表C,右手放下代表D”,好了,这就是他们的“算法(规则)”,将信息的一种形式(A,B,C,D),这里我们称为“明文”,转换成了另一种形式(摸左耳朵,摸右耳朵,放左手,放右手),这里称为“密文”,经过这种转换,很显然监考老师不会明白这些“密文”,这样,张三和李四就通过“密文”的形式实现了信息的交换。

    其实,密码学不就是为了人们更好的加密传输么?有很多学者,科学家成年累月的工作,为的就是改进或者发明更好的加密算法,让这些加密算法加密的文本难以破解,达到数据安全传输的目的。

    OK,回归正题,上面这个“作弊”的例子,其实就是一种对称加密算法!好了,我们来看一下对称加密算法的定义(来源:wikipedia):

    对称密钥加密(英语:Symmetric-key algorithm)又称为对称加密、私钥加密、共享密钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。实务上,这组密钥成为在两个或多个成员间的共同秘密,以便维持专属的通讯联系。与公开密钥加密相比,要求双方取得相同的密钥是对称密钥加密的主要缺点之一

    这里我想说一点的是,wikipedia的把Symmetric-key algorithm中文翻译是 对称密钥加密,我不想把这个key翻译成密钥,因为key仅仅是一个“钥”,这里翻译成密钥会让大家对后面所说的“公钥”,“密钥”,“私钥”等等的概念弄混,好了,所以我还是比较喜欢称之为“对称加密算法”,而后面说又称“私钥”加密,共享“密钥”,这里,“私钥”就等于“密钥”,没有任何区别,英文是“private key”。

    ok,我们将定义结合我们前面的例子对应一下,“这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥”,其实在我们例子中,密钥就是“将(A,B,C,D)转换成(摸左耳朵,摸右耳朵,放左手,放右手)”这么一个规则。“实务上,这组密钥成为在两个或多个成员间的共同秘密,以便维持专属的通讯联系。” 这句话很好理解了吧,密钥是张三和李四间共同的秘密!只有他俩事先知道。

    所以,为什么叫对称加密呢,你可以这么理解,一方通过密钥将信息加密后,把密文传给另一方,另一方通过这个相同的密钥将密文解密,转换成可以理解的明文。他们之间的关系如下:

    明文 <-> 密钥 <-> 密文

    这样看,是不是感觉对称比较好理解了。ok,那么我们现在有哪些现成的对称加密算法可以用么?当然有:

    常见的对称加密算法有DES、3DES、AES、Blowfish、IDEA、RC5、RC6。

    想深入了解的同学,可以自行查阅资料了。

    非对称加密

    我们再来说说非对称加密,非对称加密是一种比对称加密更加优秀的加密算法,当然算法有利有弊,对称加密速度快但是安全性相对于非对称加密来说低,为什么呢,你想啊,要想使用对称加密,那么分享信息的各个个体之间都需要分享这个密钥,比如你们1000个人之间都使用同一个密钥进行密文传输,只要其中一个人密钥被盗窃了,那么整体加密的信息将都被破解了。好了,那么我们开始说说非对称加密。

    就从上面提到的这个对称加密的缺点开始,怎么做到即时一个人的密钥被盗窃了,最起码保证你给其他人发送密文不被破解。于是,人们就想出了这么个办法,首先,我们停止分享共同的密钥,因为上面的bug就是来源于共享一个密钥,那么怎么办呢?每个人生成一个“私钥-公钥”对,这个私钥需要每个人自行进行保护!公钥可以随便分享,后面详细说,同时,生成的这个“私钥-公钥”对还有个强大的功能就是,使用私钥加密的信息,只能由该私钥对应的公钥才能解密,使用公钥加密的信息,只能由该公钥对应的私钥才能解密!

    好了,比如说张三生成了他自己的一个“私钥-公钥”对,叫做“张三私钥-张三公钥”,李四生成了他自己的一个“私钥-公钥”对,叫做“李四私钥-李四公钥”,之前我们说过私钥要每个个体自己进行保存,公钥可以随便分享,目的是为什么呢?是为了加密信息!

    比如,李四想给张三发送密文。
    于是李四开始给张三发QQ

    李四:
    “hi哥们,我想给你发个密文,把你的公钥给我发过来用用。”
    
    张三:
    “没问题的,这是我的公钥: d#8yHE8eU#hb*!neb,用这个公钥加密你的信息后给我发过来吧”
    
    李四:
    “这是我想对你说的话: *&#@uehuu(**#eehu&$##bfeu&&”

    恩?你是不是有点疑问呢?咳咳,李四这是作死的节奏?为什么公开问公钥?不怕被网警查水表?哈哈,非对称解密算法的威力就在这里!无所谓!随便谁截取!我们上面说了,公钥可以随意分发,所以即使别人截取了,也只是知道该公钥而已,但是要是想解密使用该公钥加密的密文!只有一个人可以办得到!就是张三! 为什么?李四使用张三的公钥加密的信息,只有张三的公钥所对应的私钥,这里就是“张三私钥”,该私钥才可以解密!所以,没有张三私钥的第三方即时截取了这些密文,也破解不了!或者更严格的说在有限时间内比如说几千年内是暴力破解不出的!

    懂了吧?所以网警们哭了,本以为想监视他们的对话,可惜一无所获!

    我们来看看非对称加密的官方定义:

    公开密钥加密(英语:public-key cryptography,又译为公开密钥加密),也称为非对称加密(asymmetric cryptography),一种密码学算法类型,在这种密码学方法中,需要一对密钥(其实这里密钥说法不好,就是“钥”),一个是私人密钥,另一个则是公开密钥。这两个密钥是数学相关,用某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥。

    hmm。。这个定义有点绕,不过就是说,要想使用非对称加密算法,首先要有一对key,一个被称为private key私钥,一个成为public key公钥,然后可以把你的public key分发给想给你传密文的用户,然后用户使用该public key加密过得密文,只有使用你的private key才能解密,也就是说,只要你自己保存好你的private key,就能确保,别人想给你发的密文不被破解,所以你不用担心别人的密钥被盗,没关系。

    正因为,这种加密是单向的,所以被称为非对称加密算法。

    这种加密算法应用非常广泛,SSH, HTTPS, TLS,电子证书,电子签名,电子身份证等等。

    这篇文章先写到这里,接下来我将像大家挨个介绍这些加密算法的应用,不过我在这里先埋个伏笔,上面我提到的李四和张三发qq,即时使用非对称加密算法,大家有没有发现仍然有哪些隐患呢?

    给点提示,比如说,某个网警想知道到底李四要给张三发什么信息?网警想破解李四的密文,那么网警有什么办法可以获得李四要发的信息呢?很显然获得密文直接暴力破解是不可能的!

    小提示,网警可以冒充张三!!!!发送给李四“网警的公钥”,而不是“张三的公钥”,那么当李四收到该公钥的时候,就不假思索的使用该公钥加密了他的信息,然后毫不犹豫的将加密的密文发了过去,然后网警得意的笑了。

    所以,问题在哪呢?这就是数字签名和数字证书的来历!我们下回接着白话。

    白话解释 电子签名,电子证书,根证书,HTTPS,PKI 到底是什么

    更多内容欢迎访问:作者博客


    读完本文章,你可以继续看如下文章:

    1. 白话解释 OSI模型,TLS/SSL 及 HTTPS(属于非对称加密算法的实际应用)
    2. 转载https://segmentfault.com/a/1190000004461428
    3. https://segmentfault.com/a/1190000012466003
    展开全文
  • 对称加密算法 1.对称加密算法的介绍 对称加密是最快速、最简洁的一种加密方式,加密与解密用的是同样的秘钥。 2.加密环境的3种解决方案 1.设置秘钥key 在配置文件中添加: encrypt.key=me 2.配置jce 下载...

    对称加密算法

    1.对称加密算法的介绍
    对称加密是最快速、最简洁的一种加密方式,加密与解密用的是同样的秘钥。

    2.加密环境的3种解决方案
    1.设置秘钥key
    在配置文件中添加:
    encrypt.key=me
    2.配置jce
    下载地址:
    http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
    下载解压后,把jar文件上传到需要安装jce机器上JDK或JRE的security目录下,覆盖源文件即可。
    JDK:将两个jar文件放到%JDK_HOME%\jre\lib\security下
    JRE:将两个jar文件放到%JRE_HOME%\lib\security下
    3.springcloud的bug我使用的springcloud版本是Dalston.SR1而这个版本的2不行,所以需要注意。我使用的springboot是1.5x。如果你的是2.0x可以换个springcloud版本试下。

    3.加密演示
    在码云中创建一个文件:
    在这里插入图片描述
    添加连接数据的内容:
    在这里插入图片描述
    post请求:
    在这里插入图片描述
    下面就会生成密码和名称的秘钥,然后我们将名称和密码替换,就这样将你的数据库密码和名称进行加密。
    在码云中替换:
    在这里插入图片描述
    注意的是我们要在前面加上:{cipher}。
    我们再重新创建一个product的项目,我复制了之前的项目,只需要能连接数据库就行,目的是验证密码进行了加密。
    这是我的新项目结构:
    在这里插入图片描述
    配置文件代码:

    spring.application.name=e-book-config-product
    server.port=8084
    eureka.client.serviceUrl.defaultZone=http://user:test@eureka2:8762/eureka/,http://user:test@eureka1:8761/eureka/
    eureka.instance.perferIpAddress=true
    #默认false,这里设置true,表示开启读取配置中心的配置
    spring.cloud.config.discovery.enabled=true
    #对应eureka中的配置中心serviceId,默认是configserver
    spring.cloud.config.discovery.serviceId=config-server
    

    启动server和client端:
    查看:
    在这里插入图片描述
    如果出现说明进行了加密。
    然后查看:
    在这里插入图片描述
    访问成功,说明加密成功。

    非对称加密算法

    对称和非对称加密的区别:
    1.对称加密算法在加密和解密使用的是同一个秘钥
    2.非对称加密算法需要两个秘钥来进行加密和解密,这两个秘钥是公开秘钥和私有秘钥。
    在这里插入图片描述
    从上面的图中我们可以分析出乙总共2个钥匙一个是公钥,一个是私钥。当甲方得到乙的公钥过后利用公钥加密发送给乙方。然后乙得到加密的信息运用自己的私钥再进行解密。这样的好处是:即使有人攻击拦截了密文而且知道了公钥也不能解开密文。只有乙的私钥才能够解开密文。

    我们还是利用一个例子来演示,利用分布式配置中心将数据库的名称和密码加密。
    服务端项目
    服务端的项目基本与我的另外一篇中的服务端项目例子一样,修改的就只有配置文件,所以我这里就只添加配置文件中的代码,大家可以参照这篇博客—>分布式配置中心
    配置文件代码如下:

    spring.application.name=config-server
    server.port=9030
    eureka.client.serviceUrl.defaultZone=http://user:test@eureka2:8762/eureka/,http://user:test@eureka1:8761/eureka/
    eureka.instance.perferIpAddress=true
    #spring.cloud.config.server.git.uri=https://gitee.com/agan_jiagou/config
    spring.cloud.config.server.git.uri=https://gitee.com/Xinyangyunyang/config
    spring.cloud.config.server.git.username=997355706@qq.com
    spring.cloud.config.server.git.password=wen1314520++
    #keytool -genkeypair -alias "config-info" -keyalg "RSA" -keystore "encrypt-info.keystore"  
    # keystore文件的路径
    encrypt.key-store.location=classpath:/encrypt-info.keystore
    #encrypt.key-store.location=encrypt-info.keystore
    # alias 指定密钥对的别名,该别名是公开的;
    encrypt.key-store.alias=config-info
    # storepass 密钥仓库
    encrypt.key-store.password=agan123
    # keypass 用来保护所生成密钥对中的私钥
    encrypt.key-store.secret=agan456
    

    大家可以看见我们添加了一个encrypt-info.keystore,这就是公钥和私钥。
    接下来就是生成这个文件encrypt-info.keystore。
    打开命令行输入模式输入:
    keytool -genkeypair -alias “config-info” -keyalg “RSA” -keystore “encrypt-info.keystore”
    在这里插入图片描述
    然后自己随便输入,但是密码和私钥必须要和配置文件中的一样。
    这样就会产生一个这个文件:
    在这里插入图片描述
    复制到这里:
    在这里插入图片描述
    启动项目测试:
    在这里插入图片描述
    说明服务安装了秘钥。
    生产端项目
    首先我们在码云上面创建一个配置文件:
    在这里插入图片描述
    然后添加:
    在这里插入图片描述
    基本就是连接数据库的配置。
    然后我们复制以前的项目,我这里是修改的里面的product项目大家如果有自己可以连接数据的项目同样可以,这里就是验证数据库加密过后能否成功。
    其他没什么修改的就配置文件代码修改了:

    spring.application.name=e-book-config-rsa-product
    server.port=8084
    eureka.client.serviceUrl.defaultZone=http://user:test@eureka2:8762/eureka/,http://user:test@eureka1:8761/eureka/
    eureka.instance.perferIpAddress=true
    #默认false,这里设置true,表示开启读取配置中心的配置
    spring.cloud.config.discovery.enabled=true
    #对应eureka中的配置中心serviceId,默认是configserver
    spring.cloud.config.discovery.serviceId=config-server
    

    然后利用post请求对数据的名称和密码进行加密:
    在这里插入图片描述
    得到加密的过后的名称和密码将码云上面的代替掉。
    然后启动项目进行测试:
    在这里插入图片描述
    访问成功,说明加密成功并且服务端完成了解密。
    同时可以查看:http://localhost:9030/e-book-config-rsa-product/default
    看到自己的数据库名称和密码。
    如果大家需要demo或者交流的话可以加我的qq997355706。

    展开全文
  • 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要...
  • 常用加密算法之非对称加密算法

    万次阅读 2018-03-16 21:44:45
    对称加密算法 非对称加密算法是一种密钥的保密方法。非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有...
  • 使用对称加密算法例子

    千次阅读 2006-05-26 13:57:00
    using System;using System.Security.Cryptography;using System.Text;.../// /// 使用对称加密算法例子/// class Class2{ static void Main(string[] args) { Class2 c=new Class2(); c.StartDemo(); }
  • 平时在工作中一直有使用到对称加密与非对称加密算法,以前一直是拿来就用,没有仔细想过里面的实现原理。今天突然有兴趣和时间研究下。 1、什么是对称加密算法? 加密和解密都使用相同密钥的算法。 公式:C=E(P,e...
  • 对称加密算法

    2017-09-25 16:52:56
    对称加密算法    对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yao)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到...
  • 使用非对称加密算法例子

    千次阅读 2006-05-26 14:01:00
    using System;using System.IO;.../// /// 一个简单的使用.NET非对称加密算法例子/// 本例的程序很简单,仅用于说明如何在.NET里面使用非对称(RSA)算法。/// class Class1{ public static void Main(strin
  • 对称加密算法-DES

    2019-12-07 15:55:05
    对称加密算法的特点是算法公开,计算量小,加密速度快,加密效率高,优势在于加解密的高速度和长密钥时的难破解性,但是,对称加密算法的安全性依赖于密钥,泄露密钥就意味着任何人都可以对加密的密文进行破解。...
  • 公钥和私钥, 以及RSA加密算法的关系. 说的就是你Charles模拟Https请求抓包(这个以后再说吧). 本次讲知识点一扫而空. 本文主要包括知识点为: 对称加密和非对称加密 公钥和私钥及数据发送 数字签名 数字证书 对称...
  • 对称加密算法(Symmetric-key algorithm)和非对称加密算法(asymmetric key encryption algorithm)只不过就是密码学(encryption)中的两种解密算法罢了,什么是算法,你就可以理解成为是一种规则吧,这种规则可以将信息...
  •   加密算法分为对称加密算法和非对称加密算法,其中非对称加密算法作为计算机通信安全的基石,在保证数据安全方面起着重要的作用。而相对于对称加密算法的易理解性,非对称加密算法存在一定的难度。下面通过对RSA...
  • 对称加密对称加密 对称加密用的是同一个密钥来加密和解密,所以,密钥需要在网络中传输(A把密钥发给B), 所以需要安全的密钥加密算法(数学理论保证可靠):密钥交换算法 非对称加密:非对称加密 ...
  • 本文简单的介绍了加密技术相关概念,最后总结了java中现有的加密技术以及使用方法和例子 【最简单的加密】 1.简单的概念 明文:加密前的信息 密文:机密后的信息 算法加密或解密的算法 密钥:算法使用的...
  • 对称加密算法

    2021-02-12 13:41:50
    对称加密算法是因为秘钥的对称而由来的,而非对称加密算法是因为和对称加密相反的原理来实现的,是高级的,举个例子: 银行的保险柜,肯定是银行工作人员拿着他自己那把钥匙,加上事主自己那把钥匙,共同才能打开...
  • using System; using System.IO;... /// /// 一个简单的使用.NET非对称加密算法例子 /// 本例的程序很简单,仅用于说明如何在.NET里面使用非对称(RSA)算法。 /// Kwanhong 2005.9 /// class Cl
  • 对称加密算法RSA 学习

    千次阅读 多人点赞 2018-10-17 17:49:28
    对称加密算法RSA 学习 RSA加密算法是一种非对称加密算法。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工...
  • Java加密-对称加密算法

    千次阅读 2016-12-12 10:00:46
    本位内容来自JAVA实现对称加密Java加密-对称加密算法对称加密算法是加密密钥等于解密密钥。常见的对称加密算法有: DES,3DES AES PBE IDEA DESDES(Data Encryption Standard)数据加密标准jdk方式实现DES的加解密...
  • 然而密码技术认为,「保密」信息总有一天会被扒出来,所以加密算法不应该依靠「保密」来保证机密性,而应该做到:即便知道了加密算法,依然无计可施。说的魔幻一点就是,告诉你我的密码,你依然不知道我的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,448
精华内容 6,979
关键字:

对称加密算法例子