日本

ライセンスファイルの保護

ライセンスは作成したアプリケーションに組み込まれます。これにより、ライセンスが見つかってコピーされたり漏洩したりする潜在的なセキュリティリスクが生じます。ライセンスを内部リソースとして埋め込むことである程度保護できますが、元のファイルはデプロイパッケージから依然として取得可能です。このページでは、暗号化を使用してライセンスファイルをより安全に保護するためのコード例を紹介します。以下のサンプルのいずれかを選択してください。

C#

public void EncryptDecryptLicense()
{
    string encryptedFilePath = MyDir + "EncryptedLicense.txt";

    // Load the contents of the license into a byte array.
    byte[] licBytes = File.ReadAllBytes("YourLicense.lic");
    // Use this key only once for this license file.
    // To protect another file first generate a new key.
    byte[] key = GenerateKey(licBytes.Length);

    // Write the encrypted license to disk.
    File.WriteAllBytes(encryptedFilePath, EncryptDecryptLicense(licBytes, key));

    // Load the encrypted license and decrypt it using the key.
    byte[] decryptedLicense;
    decryptedLicense = EncryptDecryptLicense(File.ReadAllBytes(encryptedFilePath), key);

    // Load the decrypted license into a stream and set the license.
    MemoryStream licenseStream = new MemoryStream(decryptedLicense);

    License license = new License();
    license.SetLicense(licenseStream);
}

/// <summary>
/// A method used for encrypting and decrypting data using XOR.
/// </summary>
public byte[] EncryptDecryptLicense(byte[] licBytes, byte[] key)
{
    byte[] output = new byte[licBytes.Length];

    for (int i = 0; i < licBytes.Length; i++)
        output[i] = Convert.ToByte(licBytes[i] ^ key[i]);

    return output;
}

/// <summary>
/// Generates a random key the same length as the license (a one time pad).
/// </summary>
public byte[] GenerateKey(long size)
{
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
    byte[] strongBytes = new Byte[size];
    rng.GetBytes(strongBytes);

    return strongBytes;
}

 

Java

public void encryptDecryptLicense() throws Exception
{
    String encryptedFilePath = getMyDir + "EncryptedLicense.txt";

    // Load the contents of the license into a byte array.
    byte[] licBytes = readAllBytesFromFile("YourLicense.lic");
    // Use this key only once for this license file.
    //To protect another file first generate a new key.
    byte[] key = generateKey(licBytes.Length);

    // Write the encrypted license to disk.
    BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(
                                           encryptedFilePath));
    output.write(encryptDecryptLicese(licBytes, key));
    output.close();
    
    // Load the encrypted license and decrypt it using the key.
    byte[] decryptedLicense = encryptDecryptLicense(
                      readAllBytesFromFile(encryptedFilePath), key);

    // Load the decrypted license into a stream and set the license.
    ByteArrayInputStream licenseStream = new ByteArrayInputStream(decryptedLicense);

    License license = new License();
    license.SetLicense(licenseStream);
}

// A method used for encrypting and decrypting data using XOR.
public byte[] encryptDecryptLicense(byte[] licBytes, byte[] key)
{
    byte[] output = new byte[licBytes.Length];

    for (int i = 0; i < licBytes.Length; i++)
        output[i] = (byte)(licBytes[i] ^ key[i]);

    return output;
}

// Generates a random key the same length as the license (a one time pad).
public byte[] generateKey(int size)
{
    SecureRandom rng = new SecureRandom();
    byte[] strongBytes = new byte[size];
    rng.nextBytes(strongBytes);

    return strongBytes;
}

public byte[] readAllBytesFromFile(String filePath) Throws IOException
{
    int pos;
    InputStream inputStream = new FileInputStream(filePath);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    while ((pos = inputStream.Read() != -1)
        bos.write(pos);
        
    inputStream.close();
                    
    return bos.toByteArray();
}
 
Aspose logo
質問がありますか?

ご不明点や問題がございましたら、ぜひ営業サポートへお問い合わせください。喜んでサポートいたします。