最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#與java TCP通道加密通信實(shí)例

 更新時(shí)間:2021年10月23日 09:27:19   作者:我打農(nóng)村來(lái)  
這篇文章主要介紹了C#與java TCP通道加密通信,文章通過(guò)真實(shí)的案例詳細(xì)講解說(shuō)明C#與java TCP通道加密通信的相關(guān)資料,需要的小伙伴可以參考一下

1、背景說(shuō)明

公司收費(fèi)系統(tǒng)需要與銀行做實(shí)時(shí)代收對(duì)接,業(yè)務(wù)協(xié)議使用我們收費(fèi)系統(tǒng)的標(biāo)準(zhǔn)。但是銀行要求在業(yè)務(wù)協(xié)議的基礎(chǔ)上,使用銀行的加密規(guī)則。

  • 采用MD5計(jì)算報(bào)文摘要,保證數(shù)據(jù)的完整性
  • 采用RSA256對(duì)摘要進(jìn)行簽名,保證報(bào)文的合法性
  • 采用AES進(jìn)行對(duì)稱(chēng)加密,保證報(bào)文的私密性

我們幾個(gè)人一評(píng)估,在業(yè)務(wù)報(bào)文上加一套加密方案,加密方法又是通用的,這個(gè)能有什么問(wèn)題,沒(méi)問(wèn)題。

2、測(cè)試證書(shū)

銀行發(fā)來(lái)的測(cè)試證書(shū)在這里

后來(lái)才知道這應(yīng)該叫java版格式,而且這個(gè)證書(shū)經(jīng)驗(yàn)證是正確的,可正常簽名、驗(yàn)簽的。

-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDllhc9gw7aIuv8
URnf8PtPRJZww26OeSsTa1GHtuqHdjCaosBXKWaC2/SxV3lsURizFVY+HhvH6zgq
NCWhSbnwd5ucq8ZiBkb29kIbb9oVKftxpsMTfZdAgXReUPg1cE5zxLvpmSM8ggw9
2fOq/CgYgbingzAScYR5MmMgH5PwIEVh7MiloS5fMx9HWDuKAZgdXjaZHB5UL8uu
vb83iytKJIEmS346X41jCM8UQwL4hRaPvtouGSIz+oiDpotPfJQtJVzP1P/bvlQs
RJHSn1a5aDo+ygH231+PKdfKzhwxDDMeI3Yy2zxqJKtHpVc033O2yfvn5TlQ79P0
j/hswY0fAgMBAAECggEBAKZKkWjHfcF4W+91GsW+uXiP2Fuy4mgl0ZKOQA6J6dPW
Qpwu2BwJ66tLADBXiKZxEu/bu4zgqASlFhhTjxIE4b4QFFFlhhrIKyyD8BwJZy+/
KdYHEPMUG7LoUU5jXXTvdJOb4vPvLLuOAqnmLP0jCTO++e2zMuWY/Xf/jBbfaHsa
tSM3PHYN/zlTMDyFqfDc6ig+iKejW0dnNBQZpFytijpYgW3QS6XKknDRoQ0V1vpj
oCCUMlfe8tottGoBt1Q8qrNKxFb9dyXXkGx/QgDfv8A+kWv1WuwYQGose9Gu0L28
TWGOfHS399oJffJdwa/o2no+KCaKjjL5dCIjzLDm8QECgYEA/t4JgS32JS8cxyEK
Hh0tGOZhvsh/f2IOi1+pAtBKCQan34n/NCBUeyn8Ep/K95A+bPMIltaoUZYkBTGF
bVsqdkcyG19qsV5B2ldyfvBoSpwsS7oLcV78EUPLBClCpYfmbq/MEdYTysJsjKRc
ROR0p30Cu/VEP72WTyY4zMy6yp8CgYEA5ptKmDAud48hlI7gNWkKIVEH16cg+0fS
a1JgrBUZHOoVTuK8xMUxsGyYeYYolXd7I5Q4vdZwTzjGkAzCMtHzhMUSbzt6i04o
rDkfB3HEXgoIiGvChh+CjYOhc6aqKd3vFOwVyqZ0s5slc7EF4qWy9ZWD3hwWGfEE
XkO1Zc/MrYECgYANq2UBG7D2/5bgi0IaqV/w1PJrJB/Kejzjdsb+0qMV5th8Ic+h
QRam4HKXoSBmtMLUXxiX1n2CmrXl3WkVm20kmN70HuL/Dloj1sraShSd49BwY1MX
yotkdale2MOtUyOlziH41u2K03C0/l/AhixHi2npINd/P7DfH+KuAVEHawKBgA2I
c3o26aMujSPwtour3GJUJQes0Syt7FVMAkxW+KBPxGxatgU+JUpbNR98lgkfd+SA
oEvTt8eOZ2iwtvzQgV/7SLeqX+io744b1AxVytZR9Go9GK9SThEL9n+Y+kd2tL8f
k6/O0O5xXmNJsjS40KXE3nY8Y7emA0Gc65pL9ZEBAoGBANPd8FP04tTtyqiunE8G
JrOIQGtCUoEnp4gJV5VVGus19qVf6rVMr1YEMlojxgujcaQJtE878Zep6ur2WeZu
VEQOqqXRLwKBTaWYA0iabhUDd/nAh5cCjBfcYrfdnQonNrBJi5AccbfUl6FEhkoF
XQUoc1mnauKcCB1ACvtBRNGI
-----END PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5ZYXPYMO2iLr/FEZ3/D7
T0SWcMNujnkrE2tRh7bqh3YwmqLAVylmgtv0sVd5bFEYsxVWPh4bx+s4KjQloUm5
8HebnKvGYgZG9vZCG2/aFSn7cabDE32XQIF0XlD4NXBOc8S76ZkjPIIMPdnzqvwo
GIG4p4MwEnGEeTJjIB+T8CBFYezIpaEuXzMfR1g7igGYHV42mRweVC/Lrr2/N4sr
SiSBJkt+Ol+NYwjPFEMC+IUWj77aLhkiM/qIg6aLT3yULSVcz9T/275ULESR0p9W
uWg6PsoB9t9fjynXys4cMQwzHiN2Mts8aiSrR6VXNN9ztsn75+U5UO/T9I/4bMGN
HwIDAQAB
-----END PUBLIC KEY-----


C#版本證書(shū)在這里,這個(gè)是后來(lái)正確的測(cè)試證書(shū)轉(zhuǎn)換的C#版本,與上面的java版本對(duì)應(yīng)

私鑰

<RSAKeyValue><Modulus>5ZYXPYMO2iLr/FEZ3/D7T0SWcMNujnkrE2tRh7bqh3YwmqLAVylmgtv0sVd5bFEYsxVWPh4bx+s4KjQloUm58HebnKvGYgZG9vZCG2/aFSn7cabDE32XQIF0XlD4NXBOc8S76ZkjPIIMPdnzqvwoGIG4p4MwEnGEeTJjIB+T8CBFYezIpaEuXzMfR1g7igGYHV42mRweVC/Lrr2/N4srSiSBJkt+Ol+NYwjPFEMC+IUWj77aLhkiM/qIg6aLT3yULSVcz9T/275ULESR0p9WuWg6PsoB9t9fjynXys4cMQwzHiN2Mts8aiSrR6VXNN9ztsn75+U5UO/T9I/4bMGNHw==</Modulus><Exponent>AQAB</Exponent><P>/t4JgS32JS8cxyEKHh0tGOZhvsh/f2IOi1+pAtBKCQan34n/NCBUeyn8Ep/K95A+bPMIltaoUZYkBTGFbVsqdkcyG19qsV5B2ldyfvBoSpwsS7oLcV78EUPLBClCpYfmbq/MEdYTysJsjKRcROR0p30Cu/VEP72WTyY4zMy6yp8=</P><Q>5ptKmDAud48hlI7gNWkKIVEH16cg+0fSa1JgrBUZHOoVTuK8xMUxsGyYeYYolXd7I5Q4vdZwTzjGkAzCMtHzhMUSbzt6i04orDkfB3HEXgoIiGvChh+CjYOhc6aqKd3vFOwVyqZ0s5slc7EF4qWy9ZWD3hwWGfEEXkO1Zc/MrYE=</Q><DP>DatlARuw9v+W4ItCGqlf8NTyayQfyno843bG/tKjFebYfCHPoUEWpuByl6EgZrTC1F8Yl9Z9gpq15d1pFZttJJje9B7i/w5aI9bK2koUnePQcGNTF8qLZHWpXtjDrVMjpc4h+NbtitNwtP5fwIYsR4tp6SDXfz+w3x/irgFRB2s=</DP><DQ>DYhzejbpoy6NI/C2i6vcYlQlB6zRLK3sVUwCTFb4oE/EbFq2BT4lSls1H3yWCR935ICgS9O3x45naLC2/NCBX/tIt6pf6KjvjhvUDFXK1lH0aj0Yr1JOEQv2f5j6R3a0vx+Tr87Q7nFeY0myNLjQpcTedjxjt6YDQZzrmkv1kQE=</DQ><InverseQ>093wU/Ti1O3KqK6cTwYms4hAa0JSgSeniAlXlVUa6zX2pV/qtUyvVgQyWiPGC6NxpAm0Tzvxl6nq6vZZ5m5URA6qpdEvAoFNpZgDSJpuFQN3+cCHlwKMF9xit92dCic2sEmLkBxxt9SXoUSGSgVdBShzWadq4pwIHUAK+0FE0Yg=</InverseQ><D>pkqRaMd9wXhb73Uaxb65eI/YW7LiaCXRko5ADonp09ZCnC7YHAnrq0sAMFeIpnES79u7jOCoBKUWGFOPEgThvhAUUWWGGsgrLIPwHAlnL78p1gcQ8xQbsuhRTmNddO90k5vi8+8su44CqeYs/SMJM7757bMy5Zj9d/+MFt9oexq1Izc8dg3/OVMwPIWp8NzqKD6Ip6NbR2c0FBmkXK2KOliBbdBLpcqScNGhDRXW+mOgIJQyV97y2i20agG3VDyqs0rEVv13JdeQbH9CAN+/wD6Ra/Va7BhAaix70a7QvbxNYY58dLf32gl98l3Br+jaej4oJoqOMvl0IiPMsObxAQ==</D></RSAKeyValue>
公鑰

<RSAKeyValue><Modulus>5ZYXPYMO2iLr/FEZ3/D7T0SWcMNujnkrE2tRh7bqh3YwmqLAVylmgtv0sVd5bFEYsxVWPh4bx+s4KjQloUm58HebnKvGYgZG9vZCG2/aFSn7cabDE32XQIF0XlD4NXBOc8S76ZkjPIIMPdnzqvwoGIG4p4MwEnGEeTJjIB+T8CBFYezIpaEuXzMfR1g7igGYHV42mRweVC/Lrr2/N4srSiSBJkt+Ol+NYwjPFEMC+IUWj77aLhkiM/qIg6aLT3yULSVcz9T/275ULESR0p9WuWg6PsoB9t9fjynXys4cMQwzHiN2Mts8aiSrR6VXNN9ztsn75+U5UO/T9I/4bMGNHw==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>

3、復(fù)制粘貼加密算法

百度C#RSA簽名,大差不差,還簡(jiǎn)潔明了,很快簽名、驗(yàn)簽方法就出來(lái)啦。

/// <summary>
/// RSA簽名
/// </summary>
/// <param name="privateKey">私鑰</param>
/// <param name="data">待簽名的內(nèi)容</param>
/// <returns></returns>
public static string RSASignCSharp(string data, string privateKey, string hashAlgorithm = "SHA256", string encoding = "UTF-8")
{
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
    rsa.FromXmlString(privateKey); //加載私鑰   
    var dataBytes = Encoding.GetEncoding(encoding).GetBytes(data);
    var HashbyteSignature = rsa.SignData(dataBytes, hashAlgorithm);
    return Convert.ToBase64String(HashbyteSignature);
}

/// <summary> 
/// 驗(yàn)證簽名
/// </summary>
/// <param name="data"></param>
/// <param name="signature"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static bool VerifyCSharp(string data, string publicKey, string signature, string hashAlgorithm = "SHA256", string encoding = "UTF-8")
{
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
    //導(dǎo)入公鑰,準(zhǔn)備驗(yàn)證簽名
    rsa.FromXmlString(publicKey);
    //返回?cái)?shù)據(jù)驗(yàn)證結(jié)果
    byte[] Data = Encoding.GetEncoding(encoding).GetBytes(data);
    byte[] rgbSignature = Convert.FromBase64String(signature);
    return rsa.VerifyData(Data, hashAlgorithm, rgbSignature);
}

王婆賣(mài)瓜,自賣(mài)自夸。

來(lái)波自簽自驗(yàn)吧,竟然不過(guò)。怎么就不過(guò)了呢,越簡(jiǎn)單越感覺(jué)無(wú)處下手調(diào)試呀。算法都封裝了,那只可能是參數(shù)的問(wèn)題了。

4、證書(shū)格式轉(zhuǎn)換

主要原因是javaC#采用的公鑰、私鑰存儲(chǔ)格式不一致,導(dǎo)致無(wú)法直接使用銀行提供的java版證書(shū),需要進(jìn)行格式轉(zhuǎn)換,轉(zhuǎn)換成C#能夠識(shí)別的證書(shū)。這里是轉(zhuǎn)換方法

/// <summary>
/// RSA公鑰格式轉(zhuǎn)換,java->.net
/// </summary>
/// <param name="publicKey">java生成的公鑰</param>
/// <returns></returns>
public static string RSAPublicKeyJava2DotNet(string publicKey)
{
    RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKey));
    return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent></RSAKeyValue>",
        Convert.ToBase64String(publicKeyParam.Modulus.ToByteArrayUnsigned()),
        Convert.ToBase64String(publicKeyParam.Exponent.ToByteArrayUnsigned()));

}
/// <summary>
/// RSA私鑰格式轉(zhuǎn)換,java->.net
/// </summary>
/// <param name="privateKey">java生成的私鑰</param>
/// <returns></returns>
public static string RSAPrivateKeyJava2DotNet(string privateKey)
{
    RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKey));

    return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>",
        Convert.ToBase64String(privateKeyParam.Modulus.ToByteArrayUnsigned()),
        Convert.ToBase64String(privateKeyParam.PublicExponent.ToByteArrayUnsigned()),
        Convert.ToBase64String(privateKeyParam.P.ToByteArrayUnsigned()),
        Convert.ToBase64String(privateKeyParam.Q.ToByteArrayUnsigned()),
        Convert.ToBase64String(privateKeyParam.DP.ToByteArrayUnsigned()),
        Convert.ToBase64String(privateKeyParam.DQ.ToByteArrayUnsigned()),
        Convert.ToBase64String(privateKeyParam.QInv.ToByteArrayUnsigned()),
        Convert.ToBase64String(privateKeyParam.Exponent.ToByteArrayUnsigned()));
}

結(jié)果證書(shū)轉(zhuǎn)換也不過(guò),直接拋異常。然后就反復(fù)梳理代碼邏輯,總覺(jué)得轉(zhuǎn)換方法不對(duì),各種百度。

眾里尋他千百度。驀然回首,那人卻在,燈火闌珊處。

這大概就是這種比較不可思議問(wèn)題的糾結(jié)吧,證書(shū)不會(huì)有錯(cuò)吧?

出于驗(yàn)證的目的我們找到了線上在用的正常證書(shū),進(jìn)行轉(zhuǎn)換,正常轉(zhuǎn)換,簽名驗(yàn)簽正常。不至于吧,我又找來(lái)了java的轉(zhuǎn)換方法。下面是java代碼,轉(zhuǎn)換java證書(shū)為C#格式:

package com.company;


import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateCrtKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

public class CerJava2CSharp {
    public static void main(String[] args)
    {
        String tes="java版私鑰證書(shū)";
        byte[] temp=b64decode(tes);
        String ver=getRSAPrivateKeyAsNetFormat(temp);//轉(zhuǎn)換私鑰

        String tes1="java版公鑰證書(shū)";
        byte[] temp1=b64decode(tes1);
        String ver1=getRSAPublicKeyAsNetFormat(temp1);//轉(zhuǎn)換公鑰
        String temp2= ver1;

    }
    
    public static String getRSAPrivateKeyAsNetFormat(byte[] encodedPrivkey) {
        try {
            StringBuffer buff = new StringBuffer(1024);

            PKCS8EncodedKeySpec pvkKeySpec = new PKCS8EncodedKeySpec(
                    encodedPrivkey);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            RSAPrivateCrtKey pvkKey = (RSAPrivateCrtKey) keyFactory
                    .generatePrivate(pvkKeySpec);

            buff.append("<RSAKeyValue>");
            buff.append("<Modulus>"
                    + b64encode(removeMSZero(pvkKey.getModulus().toByteArray()))
                    + "</Modulus>");

            buff.append("<Exponent>"
                    + b64encode(removeMSZero(pvkKey.getPublicExponent()
                    .toByteArray())) + "</Exponent>");

            buff.append("<P>"
                    + b64encode(removeMSZero(pvkKey.getPrimeP().toByteArray()))
                    + "</P>");

            buff.append("<Q>"
                    + b64encode(removeMSZero(pvkKey.getPrimeQ().toByteArray()))
                    + "</Q>");

            buff.append("<DP>"
                    + b64encode(removeMSZero(pvkKey.getPrimeExponentP()
                    .toByteArray())) + "</DP>");

            buff.append("<DQ>"
                    + b64encode(removeMSZero(pvkKey.getPrimeExponentQ()
                    .toByteArray())) + "</DQ>");

            buff.append("<InverseQ>"
                    + b64encode(removeMSZero(pvkKey.getCrtCoefficient()
                    .toByteArray())) + "</InverseQ>");

            buff.append("<D>"
                    + b64encode(removeMSZero(pvkKey.getPrivateExponent()
                    .toByteArray())) + "</D>");
            buff.append("</RSAKeyValue>");

            return buff.toString().replaceAll("[ \t\n\r]", "");
        } catch (Exception e) {
            System.err.println(e);
            return null;
        }
    }

    public static String getRSAPublicKeyAsNetFormat(byte[] encodedPrivkey) {
        try {
            StringBuffer buff = new StringBuffer(1024);

            PKCS8EncodedKeySpec pvkKeySpec = new PKCS8EncodedKeySpec(encodedPrivkey);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            RSAPublicKey pukKey=(RSAPublicKey) keyFactory.generatePublic(new X509EncodedKeySpec(encodedPrivkey));
            // RSAPrivateCrtKey pvkKey = (RSAPrivateCrtKey) keyFactory.generatePrivate(pvkKeySpec);

            //PublicKey publicKey =KeyFactory.getInstance("RSA").generatePublic(pvkKeySpec);
            buff.append("<RSAKeyValue>");
            buff.append("<Modulus>"
                    + b64encode(removeMSZero(pukKey.getModulus().toByteArray()))
                    + "</Modulus>");
            buff.append("<Exponent>"
                    + b64encode(removeMSZero(pukKey.getPublicExponent()
                    .toByteArray())) + "</Exponent>");
            buff.append("</RSAKeyValue>");
            return buff.toString().replaceAll("[ \t\n\r]", "");
        } catch (Exception e) {
            System.err.println(e);
            return null;
        }
    }

    public static String encodePublicKeyToXml(PublicKey key) {
        if (!RSAPublicKey.class.isInstance(key)) {
            return null;
        }
        RSAPublicKey pubKey = (RSAPublicKey) key;
        StringBuilder sb = new StringBuilder();

        sb.append("<RSAKeyValue>");
        sb.append("<Modulus>")
                .append(Base64.encode(pubKey.getModulus().toByteArray()))
                .append("</Modulus>");
        sb.append("<Exponent>")
                .append(Base64.encode(pubKey.getPublicExponent()
                        .toByteArray())).append("</Exponent>");
        sb.append("</RSAKeyValue>");
        return sb.toString();
    }

    public static byte[] removeMSZero(byte[] data) {
        byte[] data1;
        int len = data.length;
        if (data[0] == 0) {
            data1 = new byte[data.length - 1];
            System.arraycopy(data, 1, data1, 0, len - 1);
        } else
            data1 = data;

        return data1;
    }

    public static String b64encode(byte[] data) {

        String b64str = new String(Base64.encode(data));
        return b64str;
    }

    public static byte[] b64decode(String data) {
        byte[] decodeData = Base64.decode(data);
        return decodeData;
    }
}

經(jīng)驗(yàn)證,仍然無(wú)法轉(zhuǎn)換,好吧,實(shí)錘了,證書(shū)有問(wèn)題。至于是什么原因造成的證書(shū)問(wèn)題,不太清楚。更換證書(shū)后,轉(zhuǎn)換、簽名、驗(yàn)簽一切OK。

5、PS1 RSA證書(shū)格式

我們通??吹降谋容^多的證書(shū)對(duì)形式,pfx證書(shū)包含了公鑰信息和私鑰信息。cer證書(shū)只包含公鑰信息。pfx證書(shū)既可以導(dǎo)出為pfx證書(shū),也可以導(dǎo)出為cer證書(shū)。pfx證書(shū)導(dǎo)出時(shí),會(huì)提示是否導(dǎo)出私鑰,導(dǎo)出私鑰即pfx證書(shū),不到出則是cer證書(shū)。pfx證書(shū)導(dǎo)入、導(dǎo)出和程序加載時(shí),是需要提供證書(shū)密碼的。

  • 私鑰證書(shū)常見(jiàn)格式:pfx p12 pem key
  • 公鑰證書(shū)常見(jiàn)格式:pem crt/cer key

到此這篇關(guān)于C#java TCP通道加密通信實(shí)例的文章就介紹到這了,更多相關(guān)C#java TCP通道加密通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

6、參考博文

OpenSSL中證書(shū)格式的區(qū)別以及格式的轉(zhuǎn)換

RSA密鑰——JAVA與C#的區(qū)別和聯(lián)系

相關(guān)文章

  • C#中常見(jiàn)的系統(tǒng)內(nèi)置委托用法詳解

    C#中常見(jiàn)的系統(tǒng)內(nèi)置委托用法詳解

    這篇文章主要介紹了C#中常見(jiàn)的系統(tǒng)內(nèi)置委托用法,主要包括了Action類(lèi)的委托、Func類(lèi)的委托、Predicate<T>委托、Comparison<T>委托等,需要的朋友可以參考下
    2014-09-09
  • C#位運(yùn)算以及實(shí)例計(jì)算詳解

    C#位運(yùn)算以及實(shí)例計(jì)算詳解

    這篇文章主要給大家介紹了關(guān)于C#位運(yùn)算以及實(shí)例計(jì)算的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • C#條碼生成類(lèi)分享

    C#條碼生成類(lèi)分享

    這篇文章主要分享了C#條碼生成類(lèi)的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C#實(shí)現(xiàn)winform自動(dòng)關(guān)閉MessageBox對(duì)話框的方法

    C#實(shí)現(xiàn)winform自動(dòng)關(guān)閉MessageBox對(duì)話框的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)winform自動(dòng)關(guān)閉MessageBox對(duì)話框的方法,實(shí)例分析了C#中MessageBox對(duì)話框的相關(guān)操作技巧,需要的朋友可以參考下
    2015-04-04
  • C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái)的操作方法

    C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái)的操作方法

    這篇文章主要介紹了C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái),上傳視頻功能,主要要解決兩個(gè)問(wèn)題,一是在服務(wù)端通過(guò)C#生成簽名和SDKID,二是在客戶(hù)端通過(guò)JavaScript上傳視頻到騰訊云點(diǎn)播服務(wù)器,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • 算法基礎(chǔ)之算法設(shè)計(jì)與分析

    算法基礎(chǔ)之算法設(shè)計(jì)與分析

    這篇文章主要介紹了算法基礎(chǔ)之算法設(shè)計(jì)與分析,貪心算法是一種解決優(yōu)化問(wèn)題的算法設(shè)計(jì)方法,其核心思想是在每一步選擇當(dāng)前狀態(tài)下的最優(yōu)解,從而希望最終達(dá)到全局最優(yōu)解,需要的朋友可以參考下
    2023-10-10
  • 登錄驗(yàn)證全局控制的幾種方式總結(jié)(session)

    登錄驗(yàn)證全局控制的幾種方式總結(jié)(session)

    在登陸驗(yàn)證或者其他需要用到session全局變量的時(shí)候,歸結(jié)起來(lái),主要有以下三種較方便的實(shí)現(xiàn)方式。(其中個(gè)人較喜歡使用第一種實(shí)現(xiàn)方法)
    2014-01-01
  • C#實(shí)現(xiàn)動(dòng)態(tài)顯示及動(dòng)態(tài)移除圖片方法

    C#實(shí)現(xiàn)動(dòng)態(tài)顯示及動(dòng)態(tài)移除圖片方法

    這篇文章主要介紹了C#實(shí)現(xiàn)動(dòng)態(tài)顯示及動(dòng)態(tài)移除圖片方法,對(duì)于C#的初學(xué)者了解圖像操作有一定的幫助,需要的朋友可以參考下
    2014-07-07
  • Unity UI實(shí)現(xiàn)循環(huán)播放序列圖

    Unity UI實(shí)現(xiàn)循環(huán)播放序列圖

    這篇文章主要為大家詳細(xì)介紹了Unity UI實(shí)現(xiàn)循環(huán)播放序列圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C#實(shí)現(xiàn)谷歌翻譯API示例代碼

    C#實(shí)現(xiàn)谷歌翻譯API示例代碼

    本篇文章主要介紹了C#實(shí)現(xiàn)谷歌翻譯API示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06

最新評(píng)論

平昌县| 加查县| 桂阳县| 霍山县| 淮北市| 大邑县| 咸阳市| 西昌市| 耒阳市| 武穴市| 墨玉县| 白水县| 新余市| 安徽省| 连山| 大宁县| 米易县| 顺平县| 资源县| 娱乐| 镇平县| 阿克| 达日县| 比如县| 广南县| 怀安县| 上饶县| 肇州县| 望城县| 龙州县| 三穗县| 杭锦后旗| 抚远县| 繁峙县| 措美县| 武强县| 舒兰市| 泗水县| 礼泉县| 夏邑县| 郎溪县|